From e0d521837a9a0a4fb171e2db6ca2cf95f864d2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=A0=91=E5=9D=A4?= Date: Sun, 21 Mar 2021 00:07:45 +0800 Subject: [PATCH 01/41] kun --- Events.py | 2 +- common/autoload.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Events.py b/Events.py index c52d4ef..45d8940 100644 --- a/Events.py +++ b/Events.py @@ -14,7 +14,7 @@ class MyFileSystemEventHander(FileSystemEventHandler): if time.time()-eventgtimexz > 3: eventgtimexz=time.time() # print('* 更新文件:%s' % event.src_path) - # time.sleep(2) + # time.sleep(20) time.sleep(0.2) self.restart() class Events: diff --git a/common/autoload.py b/common/autoload.py index a015f40..3a415d7 100644 --- a/common/autoload.py +++ b/common/autoload.py @@ -947,7 +947,7 @@ class create: i=0 j+=1 arr=arr['data'] - r=requests.get(arr['dowurl']) + r=requests.get(arr['dowurl'],verify=False) f = open(self.appname+"/"+self.modular+"/controller/"+plug+".zip", "wb") for chunk in r.iter_content(chunk_size=512): if chunk: -- Gitee From a1c30eb8676930bdea2359121f78577707710013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=A0=91=E5=9D=A4?= Date: Thu, 24 Jun 2021 02:15:14 +0800 Subject: [PATCH 02/41] k --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e3f3a9c..42359e9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ kcweb作为web开发而设计的高性能框架,采用全新的架构思想,注重易用性。遵循MIT开源许可协议发布,意味着个人和企业可以免费使用kcweb,甚至允许把你基于kcweb开发的应用开源或商业产品发布或销售。 -[官方完整文档](https://intapp.kwebapp.cn/intapp/doc/index/finddoc/1/29/1 "官方文档") +[完整文档](https://intapp.kwebapp.cn/intapp/doc/index/finddoc/1/29/1 "官方文档") ------------ -- Gitee From 73653a20a76051907b797ccd3858bcd18eaf8382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=A0=91=E5=9D=A4?= Date: Mon, 5 Jul 2021 19:31:30 +0800 Subject: [PATCH 03/41] k --- utill/db/mysql.py | 148 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 140 insertions(+), 8 deletions(-) diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 9057064..1ba56da 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -304,9 +304,9 @@ class mysql: self.__table=table return self __patternerrorcount=0 # 长连接情况下 错误次数 - def __execute(self,typess='DQL'): - """执行sql语句 - + def __setcursor(self,typess='DQL'): + """设置游标 + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ self.__setdbcount() @@ -321,10 +321,8 @@ class mysql: types='master' self.__dbobjident=random.randint(0, self.__dbObjcount-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 - res=self.__cursor.execute(self.__sql) else: self.__cursor=self.__conn[self.__masteridentifier].cursor() #获取随机数据库链接实例 - res=self.__cursor.execute(self.__sql) elif self.__config['deploy']==1: # 分布式(主从服务器) if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier @@ -358,11 +356,9 @@ class mysql: types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 - res=self.__cursor.execute(self.__sql) self.__conn[bs][self.__dbobjident]['error']=0 else: self.__cursor=self.__conn[self.__masteridentifier].cursor() - res=self.__cursor.execute(self.__sql) except Exception as e: # 铺获未知异常 try: errorcodes=tuple(eval(str(e)))[0] @@ -420,7 +416,143 @@ class mysql: raise Exception(e) else: self.__patternerrorcount=0 - return res + return self.__cursor + def __execute(self,typess='DQL'): + """执行sql语句 + + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + """ + self.__setcursor(typess) + return self.__cursor.execute(self.__sql) + def get_exec_cursor(self): + """获取执行游标 + + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + """ + return self.__setcursor("DML") + def get_query_cursor(self): + """获取查询游标 + + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + """ + return self.__setcursor("DQL") + # def __execute(self,typess='DQL'): + # """执行sql语句 + + # 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + # """ + # self.__setdbcount() + # # self.__DBsingle=self.__config['pattern'] + # self.__dbObjcount=self.__config['dbObjcount'] + # self.__errorcount=self.__config['break'] + # self.__connects() + # try: + # if self.__config['deploy']==0: # 集中式(单一服务器) + # if self.__config['pattern']: # 长连接情况下 + # bs=self.__masteridentifier + # types='master' + # self.__dbobjident=random.randint(0, self.__dbObjcount-1) + # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 + # res=self.__cursor.execute(self.__sql) + # else: + # self.__cursor=self.__conn[self.__masteridentifier].cursor() #获取随机数据库链接实例 + # res=self.__cursor.execute(self.__sql) + # elif self.__config['deploy']==1: # 分布式(主从服务器) + # if self.__config['pattern']: # 长连接情况下 + # bs=self.__masteridentifier + # slavecount=self.__dbcount-self.__config['master_num'] #从服务器数量 + # types='master' + # if typess=='DQL': #数据查询语言DQL + # if self.__config['master_dql']: #主服务器可以执行DQL + # if slavecount: + # if random.randint(0,1): + # bs=self.__masteridentifier + # types='master' + # self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) + # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 + # else: + # bs=self.__slaveidentifier + # types='slave' + # self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) + # self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 + # else: + # bs=self.__masteridentifier + # types='master' + # self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) + # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 + # else: + # bs=self.__slaveidentifier + # types='slave' + # self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) + # self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 + # else: #数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + # bs=self.__masteridentifier + # types='master' + # self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) + # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 + # res=self.__cursor.execute(self.__sql) + # self.__conn[bs][self.__dbobjident]['error']=0 + # else: + # self.__cursor=self.__conn[self.__masteridentifier].cursor() + # res=self.__cursor.execute(self.__sql) + # except Exception as e: # 铺获未知异常 + # try: + # errorcodes=tuple(eval(str(e)))[0] + # except: + # errorcodes=0 + # if errorcodes == 2013 or errorcodes == 2006 or errorcodes == 2003 or errorcodes == 1053 or errorcodes == 0: #2013连接丢失、2003数据库无法连接时、1053连接正在被关闭时、2006服务器丢失 + # if self.__config['pattern']: # 长连接情况下 + # if self.__config['cli']==True: + # if self.__config['debug']: + # print("等待连接数据库") + # if self.__patternerrorcount>self.__config['dbObjcount'] * self.__dbcount: #长连接情况下如果错误次数超过数据实例数量 关闭使用连接进行重连接 + # self.__patternerrorcount=0 + # if self.__config['deploy'] == 1: #分布式(主从服务器) 情况下 + # if self.__config['debug']: + # print("数据库连接失效,关闭主从连接池后重新连接") + # self.__closeconn(self.__masteridentifier) + # self.__closeconn(self.__slaveidentifier) + # time.sleep(10) + # self.__connects(typess) + # self.__execute(typess) + # else: + # if self.__config['debug']: + # print("数据库连接失效,关闭主连接池后重新连接") + # self.__closeconn(self.__masteridentifier) + # time.sleep(10) + # self.__connects(typess) + # self.__execute(typess) + # else: + # self.__patternerrorcount=self.__patternerrorcount+1 + # self.__execute(typess) + # else: + # self.__conn[bs][self.__dbobjident]['error']=self.__conn[bs][self.__dbobjident]['error']+1 #当前数据库连接实例异常错误数量 + # if self.__conn[bs][self.__dbobjident]['error'] > 0: + # try: + # # mysql.__conn[bs][self.__dbobjident]['obj'].close() #关闭当前实例 + # self.__closeconn(bs) + # except Exception as e: + # if self.__config['debug']: + # print("关闭异常",e) + # else: + # self.__connects(typess) + # self.__execute(typess) + # else: # 短连接情况下 + # if self.__config['debug']: + # print("服务器正在被关闭,关闭当前连接后重试") + # try: + # del mysql.__conn[self.__masteridentifier] + # mysql.__conn[self.__masteridentifier].close() #关闭当前实例 + # except Exception as e: + # if self.__config['debug']: + # print("关闭异常",e) + # self.__connects(typess) + # self.__execute(typess) + # else: + # raise Exception(e) + # else: + # self.__patternerrorcount=0 + # return res def query(self,sql): """执行sql语句 注:只支持单一服务器模式 -- Gitee From 34e8f5f7ff2e5daca72e121591097af2d09017f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=A0=91=E5=9D=A4?= Date: Mon, 5 Jul 2021 20:38:07 +0800 Subject: [PATCH 04/41] k --- utill/db/mysql.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 1ba56da..37ac917 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -674,7 +674,26 @@ class mysql: k=float(row[q]) item[keys[q]] = k return item - + def value(self,field): + """查询指定字段值 + + 返回 一个字段 + """ + self.__field=field + self.limit(1) + self.__setsql() + if self.__buildSql: + self.__sqls="("+self.__sql+")" + self.__None() + return self.__sqls + self.__execute() + result = self.__cursor.fetchall() #获取查询结果 + self.__cursor.close() + self.__None() + strs='' + if result: + strs=result[0][0] + return strs def count(self,field="*"): """查询数量 -- Gitee From 94051dbb924a93ffc4ed5483a49bb3cd0a0d37a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=A0=91=E5=9D=A4?= Date: Tue, 6 Jul 2021 17:44:44 +0800 Subject: [PATCH 05/41] k --- common/autoload.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/common/autoload.py b/common/autoload.py index 3a415d7..3c66b98 100644 --- a/common/autoload.py +++ b/common/autoload.py @@ -232,6 +232,79 @@ class kcwebsocket: # def start(): # kwebsocket=kcwebsocket() # kwebsocket.start() + + +class DFAFilter(): + """DFA算法文字过滤器""" + __sensitivelist=[] + def __init__(self,sensitivelist): + """ + sensitivelist 敏感字符串列表 + """ + self.keyword_chains = {} # 关键词链表 + self.delimit = '\x00' # 限定 + for keyword in sensitivelist: + self.__add(str(keyword).strip()) + def __add(self, keyword): + keyword = keyword.lower() # 关键词英文变为小写 + chars = keyword.strip() # 关键字去除首尾空格和换行 + if not chars: # 如果关键词为空直接返回 + return + level = self.keyword_chains + # 遍历关键字的每个字 + for i in range(len(chars)): + # 如果这个字已经存在字符链的key中就进入其子字典 + if chars[i] in level: + level = level[chars[i]] + else: + if not isinstance(level, dict): + break + for j in range(i, len(chars)): + level[chars[j]] = {} + last_level, last_char = level, chars[j] + level = level[chars[j]] + last_level[last_char] = {self.delimit: 0} + break + if i == len(chars) - 1: + level[self.delimit] = 0 + def filter(self, message, repl=""): + """ 获取过滤后的字符串 + + message 待处理的字符串 + + repl 替换内容 + """ + message = message.lower() + ret = [] + start = 0 + while start < len(message): + level = self.keyword_chains + step_ins = 0 + for char in message[start:]: + if char in level: + step_ins += 1 + if self.delimit not in level[char]: + level = level[char] + else: + ret.append(repl * step_ins) + start += step_ins - 1 + break + else: + ret.append(message[start]) + break + else: + ret.append(message[start]) + start += 1 + return ''.join(ret) + def sensitive(self,message): + """ 判断字符串是否包含敏感 + + message 待处理的字符串 + """ + if self.filter(message) == message: + return True + else: + return False redis=kcwredis() def send_mail(user,text="邮件内容",theme="邮件主题",recNick="收件人昵称"): """发送邮件 -- Gitee From 07364432d32d0b9036e003af18f1a20a42f08fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=A0=91=E5=9D=A4?= Date: Sun, 11 Jul 2021 00:50:24 +0800 Subject: [PATCH 06/41] k --- Events.py | 2 +- README.md | 2 +- config/__init__.py | 5 +- utill/cache/cache.py | 141 ++++++++++++++++++++++++++++--------------- utill/db/mysql.py | 112 ++++++++++++++++++++++++++++------ 5 files changed, 192 insertions(+), 70 deletions(-) diff --git a/Events.py b/Events.py index 45d8940..1cba5fb 100644 --- a/Events.py +++ b/Events.py @@ -14,7 +14,7 @@ class MyFileSystemEventHander(FileSystemEventHandler): if time.time()-eventgtimexz > 3: eventgtimexz=time.time() # print('* 更新文件:%s' % event.src_path) - # time.sleep(20) + # time.sleep(10) time.sleep(0.2) self.restart() class Events: diff --git a/README.md b/README.md index 42359e9..e3f3a9c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ kcweb作为web开发而设计的高性能框架,采用全新的架构思想,注重易用性。遵循MIT开源许可协议发布,意味着个人和企业可以免费使用kcweb,甚至允许把你基于kcweb开发的应用开源或商业产品发布或销售。 -[完整文档](https://intapp.kwebapp.cn/intapp/doc/index/finddoc/1/29/1 "官方文档") +[官方完整文档](https://intapp.kwebapp.cn/intapp/doc/index/finddoc/1/29/1 "官方文档") ------------ diff --git a/config/__init__.py b/config/__init__.py index 938fc68..418d852 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -26,17 +26,18 @@ redis['ex']=0 #过期时间 (秒) #缓存配置 cache={} -cache['type']='File' #驱动方式 支持 File Redis +cache['type']='File' #驱动方式 支持 File Redis Python cache['path']='runtime/cachepath' #缓存保存目录 cache['expire']=120 #缓存有效期 0表示永久缓存 cache['host']=redis['host'] #Redis服务器地址 cache['port']=redis['port'] #Redis 端口 cache['password']=redis['password'] #Redis登录密码 cache['db']=1 #Redis数据库 注:Redis用1或2或3等表示 +cachevalue={} # session配置 session={} -session['type']='File' #session 存储类型 支持 file、Redis +session['type']='File' #session 存储类型 支持 file、Redis、Python session['path']='runtime/session' #session缓存目录 session['expire']=86400 #session默认有效期 该时间是指session在服务的保留时间,通常情况下浏览器上会保留该值的10倍 session['prefix']="KCW" # SESSION 前缀 diff --git a/utill/cache/cache.py b/utill/cache/cache.py index 8df20e7..357768f 100644 --- a/utill/cache/cache.py +++ b/utill/cache/cache.py @@ -2,7 +2,7 @@ import os,sys,time,hashlib,json from kcweb import config from kcweb.utill import rediss as red -from kcweb.utill.db.mysql import mysql +# from kcweb.utill.db.mysql import mysql import time,hashlib def md5(strs): @@ -36,20 +36,20 @@ class cache: __config=config.cache __redisobj=None __mysqlobj=None - def __setmysqlonj(self): - conf=config.database - if 'host' in self.__config and self.__config['host']: - conf['host']=[self.__config['host']] - if 'port' in self.__config and self.__config['port']: - conf['port']=[self.__config['port']] - if 'user' in self.__config and self.__config['user']: - conf['user']=[self.__config['user']] - if 'password' in self.__config and self.__config['password']: - conf['password']=[self.__config['password']] - if 'db' in self.__config and self.__config['db']: - conf['db']=[self.__config['db']] - db=mysql() - self.__mysqlobj=db.connect(conf) + # def __setmysqlonj(self): + # conf=config.database + # if 'host' in self.__config and self.__config['host']: + # conf['host']=[self.__config['host']] + # if 'port' in self.__config and self.__config['port']: + # conf['port']=[self.__config['port']] + # if 'user' in self.__config and self.__config['user']: + # conf['user']=[self.__config['user']] + # if 'password' in self.__config and self.__config['password']: + # conf['password']=[self.__config['password']] + # if 'db' in self.__config and self.__config['db']: + # conf['db']=[self.__config['db']] + # db=mysql() + # self.__mysqlobj=db.connect(conf) def __setredisobj(self): "设置redis链接实例" conf=config.redis @@ -132,53 +132,100 @@ class cache: return self.__getrediscache() elif types=='del': return self.__delrediscache() - elif self.__config['type'] == 'MySql': - self.__setmysqlonj() + # elif self.__config['type'] == 'MySql': + # self.__setmysqlonj() + # if types == 'set': + # return self.__setmysqlcache() + # elif types == 'get': + # return self.__getmysqlcache() + # elif types == 'del': + # return self.__delmysqlcache() + elif self.__config['type'] == 'Python': if types == 'set': - return self.__setmysqlcache() + return self.__setpythoncache() elif types == 'get': - return self.__getmysqlcache() + return self.__getpythoncache() elif types == 'del': - return self.__delmysqlcache() + return self.__delpythoncache() else: raise Exception("缓存类型错误") - def __setmysqlcache(self): ######################################################################################## - """设置mysql缓存 + def __setpythoncache(self): + """设置python缓存 return Boolean类型 """ - data=[str(self.__values)] - strs="[" - for k in data: - strs=strs+k - strs=strs+"]" - k=self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).count('id') - self.__setmysqlonj() - if k: - return self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).update({"val":strs,"expire":self.__config['expire'],"time":times()}) - else: - return self.__mysqlobj.table('fanshukeji_core_cache').insert({"name":self.__name,"val":strs,"expire":self.__config['expire'],"time":times()}) - def __getmysqlcache(self): - """获取mysql缓存 + data={ + 'expire':self.__config['expire'], + 'time':times(), + 'values':self.__values + } + config.cachevalue[self.__name]=data + return True + def __getpythoncache(self): + """获取python缓存 return 缓存的值 """ - data=self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).find() - if data : - if data['expire']>0 and times()-data['time']>data['expire']: - self.__setmysqlonj() - self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).delete() - return False - else: - return eval(data['val'])[0] + try: + ar=config.cachevalue[self.__name] + except KeyError: + return "" else: - return False - def __delmysqlcache(self): - """删除mysql缓存 + if ar['expire'] > 0: + if (times()-ar['time']) > ar['expire']: + self.__delpythoncache() + return "" + else: + return ar['values'] + else: + return ar['values'] + def __delpythoncache(self): + """删除python缓存 return Boolean类型 """ - return self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).delete() + try: + del config.cachevalue[self.__name] + except KeyError: + pass + return True + # def __setmysqlcache(self): ######################################################################################## + # """设置mysql缓存 + + # return Boolean类型 + # """ + # data=[str(self.__values)] + # strs="[" + # for k in data: + # strs=strs+k + # strs=strs+"]" + # k=self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).count('id') + # self.__setmysqlonj() + # if k: + # return self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).update({"val":strs,"expire":self.__config['expire'],"time":times()}) + # else: + # return self.__mysqlobj.table('fanshukeji_core_cache').insert({"name":self.__name,"val":strs,"expire":self.__config['expire'],"time":times()}) + # def __getmysqlcache(self): + # """获取mysql缓存 + + # return 缓存的值 + # """ + # data=self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).find() + # if data : + # if data['expire']>0 and times()-data['time']>data['expire']: + # self.__setmysqlonj() + # self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).delete() + # return False + # else: + # return eval(data['val'])[0] + # else: + # return False + # def __delmysqlcache(self): + # """删除mysql缓存 + + # return Boolean类型 + # """ + # return self.__mysqlobj.table('fanshukeji_core_cache').where("name",self.__name).delete() def __setrediscache(self): """设置redis缓存 diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 37ac917..9c4f4cb 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -2,8 +2,20 @@ from .pymysql import connect,escape_string # import config.conf as config import kcweb.config as config -import time,traceback,decimal,random,copy +import time,traceback,decimal,random,copy,hashlib +from kcweb.utill.cache import cache as kcwcache +mycache=copy.deepcopy(config.cache) +mycache['type']='Python' + dbconfig=config.database +def md5(strs): + """md5加密""" + if not strs: + return strs + m = hashlib.md5() + b = strs.encode(encoding='utf-8') + m.update(b) + return m.hexdigest() class mysql: """数据库实例""" __config=dbconfig @@ -610,8 +622,6 @@ class mysql: i=i+1 lists.append(dicts) return lists - - def select(self,id=None): """select查询 @@ -624,12 +634,16 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sqls - + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() description=self.__cursor.description #获取字段 result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() - self.__None() + # self.__None() lists=[] keys =[] for field in description:#获取字段 @@ -643,6 +657,9 @@ class mysql: k=float(row[q]) item[keys[q]] = k lists.append(item) + if lists and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),lists,self.__cache[1]) + self.__None() return lists def find(self,id=None): """查询一条记录 @@ -657,11 +674,16 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sqls + if self.__cache and self.__cache[0]: + item=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if item: + self.__None() + return item self.__execute() description=self.__cursor.description #获取字段 result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() - self.__None() + # self.__None() item = dict() keys =[] for field in description:#获取字段 @@ -673,6 +695,9 @@ class mysql: if type(row[q])==decimal.Decimal: k=float(row[q]) item[keys[q]] = k + if item and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),item,self.__cache[1]) + self.__None() return item def value(self,field): """查询指定字段值 @@ -686,13 +711,21 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sqls + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() - self.__None() + # self.__None() strs='' if result: strs=result[0][0] + if strs and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),strs,self.__cache[1]) + self.__None() return strs def count(self,field="*"): """查询数量 @@ -705,6 +738,11 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sql + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() @@ -716,6 +754,9 @@ class mysql: except IndexError: cou=0 # self.__None() + if cou and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),cou,self.__cache[1]) + self.__None() return cou def max(self,field): """查询某字段的最大值 @@ -728,10 +769,18 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sql + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() cou=int(result[0][0]) + # self.__None() + if cou and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),cou,self.__cache[1]) self.__None() return cou def min(self,field): @@ -745,11 +794,19 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sql + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() - self.__None() + # self.__None() cou=int(result[0][0]) + if cou and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),cou,self.__cache[1]) + self.__None() return cou def avg(self,field): """查询某字段的平均值 @@ -762,11 +819,19 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sql + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() - self.__None() + # self.__None() cou=int(result[0][0]) + if cou and self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),cou,self.__cache[1]) + self.__None() return cou def sum(self,field): """查询某字段之和 @@ -779,13 +844,22 @@ class mysql: self.__sqls="("+self.__sql+")" self.__None() return self.__sql + if self.__cache and self.__cache[0]: + cou=kcwcache.cache().set_config(mycache).get_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0]))) + if cou: + self.__None() + return cou self.__execute() result = self.__cursor.fetchall() #获取查询结果 self.__cursor.close() - self.__None() + # self.__None() cou=result[0][0] if not cou: cou=0 + else: + if self.__cache and self.__cache[0]: + kcwcache.cache().set_config(mycache).set_cache(md5(self.__sql+str(self.__config['db'][0])+str(self.__config['host'][0])),cou,self.__cache[1]) + self.__None() return cou def setinc(self,field,key=1,affair=False): @@ -915,6 +989,7 @@ class mysql: self.__table=None self.__buildSql=None self.__table=None + self.__cache=None __where=None __wheres=() @@ -1072,16 +1147,15 @@ class mysql: self.__lock=strs return self - # __cache=[] - # def cache(self,endtime,tag=None): - # """设置查询缓存 - - # 参数 endtime:int 缓存数据 0永久 + __cache=[] + def cache(self,status=None,endtime=86400): + """设置查询缓存 + status 缓存开关 - # 参数 tag:int 缓存标签 - # """ - # self.__cache=[endtime,tag] - # return self + 参数 endtime:int 缓存时间 0永久 + """ + self.__cache=[status,endtime] + return self def __setsql(self,types=None,data = {}): """生成sql语句""" if types==None: -- Gitee From 60c979c0fff514ad4b432e9ca314ae080bd12401 Mon Sep 17 00:00:00 2001 From: kun Date: Mon, 23 Aug 2021 23:54:41 +0800 Subject: [PATCH 07/41] k --- utill/db/mysql.py | 77 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 9c4f4cb..46118cc 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -371,6 +371,73 @@ class mysql: self.__conn[bs][self.__dbobjident]['error']=0 else: self.__cursor=self.__conn[self.__masteridentifier].cursor() + except Exception as e: # 铺获未知异常 + # try: + # errorcodes=tuple(eval(str(e)))[0] + # except: + # errorcodes=0 + # if errorcodes == 2013 or errorcodes == 2006 or errorcodes == 2003 or errorcodes == 1053 or errorcodes == 0: #2013连接丢失、2003数据库无法连接时、1053连接正在被关闭时、2006服务器丢失 + # if self.__config['pattern']: # 长连接情况下 + # if self.__config['cli']==True: + # if self.__config['debug']: + # print("等待连接数据库") + # if self.__patternerrorcount>self.__config['dbObjcount'] * self.__dbcount: #长连接情况下如果错误次数超过数据实例数量 关闭使用连接进行重连接 + # self.__patternerrorcount=0 + # if self.__config['deploy'] == 1: #分布式(主从服务器) 情况下 + # if self.__config['debug']: + # print("数据库连接失效,关闭主从连接池后重新连接") + # self.__closeconn(self.__masteridentifier) + # self.__closeconn(self.__slaveidentifier) + # time.sleep(10) + # self.__connects(typess) + # self.__execute(typess) + # else: + # if self.__config['debug']: + # print("数据库连接失效,关闭主连接池后重新连接") + # self.__closeconn(self.__masteridentifier) + # time.sleep(10) + # self.__connects(typess) + # self.__execute(typess) + # else: + # self.__patternerrorcount=self.__patternerrorcount+1 + # self.__execute(typess) + # else: + # self.__conn[bs][self.__dbobjident]['error']=self.__conn[bs][self.__dbobjident]['error']+1 #当前数据库连接实例异常错误数量 + # if self.__conn[bs][self.__dbobjident]['error'] > 0: + # try: + # # mysql.__conn[bs][self.__dbobjident]['obj'].close() #关闭当前实例 + # self.__closeconn(bs) + # except Exception as e: + # if self.__config['debug']: + # print("关闭异常",e) + # else: + # self.__connects(typess) + # self.__execute(typess) + # else: # 短连接情况下 + # if self.__config['debug']: + # print("服务器正在被关闭,关闭当前连接后重试") + # try: + # del mysql.__conn[self.__masteridentifier] + # mysql.__conn[self.__masteridentifier].close() #关闭当前实例 + # except Exception as e: + # if self.__config['debug']: + # print("关闭异常",e) + # self.__connects(typess) + # self.__execute(typess) + # else: + # raise Exception(e) + raise Exception(e) + else: + self.__patternerrorcount=0 + return self.__cursor + def __execute(self,typess='DQL'): + """执行sql语句 + + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + """ + self.__setcursor(typess) + try: + return self.__cursor.execute(self.__sql) except Exception as e: # 铺获未知异常 try: errorcodes=tuple(eval(str(e)))[0] @@ -426,16 +493,6 @@ class mysql: self.__execute(typess) else: raise Exception(e) - else: - self.__patternerrorcount=0 - return self.__cursor - def __execute(self,typess='DQL'): - """执行sql语句 - - 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL - """ - self.__setcursor(typess) - return self.__cursor.execute(self.__sql) def get_exec_cursor(self): """获取执行游标 -- Gitee From 8b18245d2ca63c0fb97f5ac797a60574c81e005f Mon Sep 17 00:00:00 2001 From: kun Date: Mon, 23 Aug 2021 23:58:42 +0800 Subject: [PATCH 08/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/db/mysql.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 418d852..dc84495 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.12.5' #项目版本 +kcweb['version']='4.12.6' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 2b3993e..2abb6e5 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.12.5' #项目版本 +confkcw['version']='4.12.6' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加websocket" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 46118cc..a506603 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -429,15 +429,15 @@ class mysql: raise Exception(e) else: self.__patternerrorcount=0 - return self.__cursor + return self.__cursor,bs def __execute(self,typess='DQL'): """执行sql语句 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ - self.__setcursor(typess) + cursor,bs=self.__setcursor(typess) try: - return self.__cursor.execute(self.__sql) + return cursor.execute(self.__sql) except Exception as e: # 铺获未知异常 try: errorcodes=tuple(eval(str(e)))[0] -- Gitee From bf78f111565ba1ded800c4ac6a259520bc3e4667 Mon Sep 17 00:00:00 2001 From: kun Date: Tue, 24 Aug 2021 00:02:15 +0800 Subject: [PATCH 09/41] k --- utill/db/mysql.py | 1 + 1 file changed, 1 insertion(+) diff --git a/utill/db/mysql.py b/utill/db/mysql.py index a506603..2afbb86 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -326,6 +326,7 @@ class mysql: self.__dbObjcount=self.__config['dbObjcount'] self.__errorcount=self.__config['break'] self.__connects() + bs='' try: if self.__config['deploy']==0: # 集中式(单一服务器) if self.__config['pattern']: # 长连接情况下 -- Gitee From c428ac07e57e7175327988e013fa3f4b7cd8f1bc Mon Sep 17 00:00:00 2001 From: kun Date: Tue, 24 Aug 2021 00:07:18 +0800 Subject: [PATCH 10/41] k --- utill/db/mysql.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 2afbb86..9254998 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -499,13 +499,15 @@ class mysql: 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ - return self.__setcursor("DML") + cursor,bs=self.__setcursor("DML") + return cursor def get_query_cursor(self): """获取查询游标 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ - return self.__setcursor("DQL") + cursor,bs=self.__setcursor("DQL") + return cursor # def __execute(self,typess='DQL'): # """执行sql语句 -- Gitee From 0b5ea655b0a717f49ddb687e3f02fccb1b225826 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 29 Aug 2021 21:40:57 +0800 Subject: [PATCH 11/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/db/mysql.py | 122 ++++++++++++++++++++++----------------------- 3 files changed, 63 insertions(+), 63 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index dc84495..2c58f79 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.12.6' #项目版本 +kcweb['version']='4.12.7' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 2abb6e5..27652e8 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.12.6' #项目版本 +confkcw['version']='4.12.7' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加websocket" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 9254998..2ece78a 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -373,72 +373,69 @@ class mysql: else: self.__cursor=self.__conn[self.__masteridentifier].cursor() except Exception as e: # 铺获未知异常 - # try: - # errorcodes=tuple(eval(str(e)))[0] - # except: - # errorcodes=0 - # if errorcodes == 2013 or errorcodes == 2006 or errorcodes == 2003 or errorcodes == 1053 or errorcodes == 0: #2013连接丢失、2003数据库无法连接时、1053连接正在被关闭时、2006服务器丢失 - # if self.__config['pattern']: # 长连接情况下 - # if self.__config['cli']==True: - # if self.__config['debug']: - # print("等待连接数据库") - # if self.__patternerrorcount>self.__config['dbObjcount'] * self.__dbcount: #长连接情况下如果错误次数超过数据实例数量 关闭使用连接进行重连接 - # self.__patternerrorcount=0 - # if self.__config['deploy'] == 1: #分布式(主从服务器) 情况下 - # if self.__config['debug']: - # print("数据库连接失效,关闭主从连接池后重新连接") - # self.__closeconn(self.__masteridentifier) - # self.__closeconn(self.__slaveidentifier) - # time.sleep(10) - # self.__connects(typess) - # self.__execute(typess) - # else: - # if self.__config['debug']: - # print("数据库连接失效,关闭主连接池后重新连接") - # self.__closeconn(self.__masteridentifier) - # time.sleep(10) - # self.__connects(typess) - # self.__execute(typess) - # else: - # self.__patternerrorcount=self.__patternerrorcount+1 - # self.__execute(typess) - # else: - # self.__conn[bs][self.__dbobjident]['error']=self.__conn[bs][self.__dbobjident]['error']+1 #当前数据库连接实例异常错误数量 - # if self.__conn[bs][self.__dbobjident]['error'] > 0: - # try: - # # mysql.__conn[bs][self.__dbobjident]['obj'].close() #关闭当前实例 - # self.__closeconn(bs) - # except Exception as e: - # if self.__config['debug']: - # print("关闭异常",e) - # else: - # self.__connects(typess) - # self.__execute(typess) - # else: # 短连接情况下 - # if self.__config['debug']: - # print("服务器正在被关闭,关闭当前连接后重试") - # try: - # del mysql.__conn[self.__masteridentifier] - # mysql.__conn[self.__masteridentifier].close() #关闭当前实例 - # except Exception as e: - # if self.__config['debug']: - # print("关闭异常",e) - # self.__connects(typess) - # self.__execute(typess) - # else: - # raise Exception(e) raise Exception(e) else: self.__patternerrorcount=0 - return self.__cursor,bs + return self.__cursor def __execute(self,typess='DQL'): """执行sql语句 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ - cursor,bs=self.__setcursor(typess) + self.__setdbcount() + # self.__DBsingle=self.__config['pattern'] + self.__dbObjcount=self.__config['dbObjcount'] + self.__errorcount=self.__config['break'] + self.__connects() try: - return cursor.execute(self.__sql) + if self.__config['deploy']==0: # 集中式(单一服务器) + if self.__config['pattern']: # 长连接情况下 + bs=self.__masteridentifier + types='master' + self.__dbobjident=random.randint(0, self.__dbObjcount-1) + self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 + res=self.__cursor.execute(self.__sql) + else: + self.__cursor=self.__conn[self.__masteridentifier].cursor() #获取随机数据库链接实例 + res=self.__cursor.execute(self.__sql) + elif self.__config['deploy']==1: # 分布式(主从服务器) + if self.__config['pattern']: # 长连接情况下 + bs=self.__masteridentifier + slavecount=self.__dbcount-self.__config['master_num'] #从服务器数量 + types='master' + if typess=='DQL': #数据查询语言DQL + if self.__config['master_dql']: #主服务器可以执行DQL + if slavecount: + if random.randint(0,1): + bs=self.__masteridentifier + types='master' + self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) + self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 + else: + bs=self.__slaveidentifier + types='slave' + self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) + self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 + else: + bs=self.__masteridentifier + types='master' + self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) + self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 + else: + bs=self.__slaveidentifier + types='slave' + self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) + self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 + else: #数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + bs=self.__masteridentifier + types='master' + self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) + self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 + res=self.__cursor.execute(self.__sql) + self.__conn[bs][self.__dbobjident]['error']=0 + else: + self.__cursor=self.__conn[self.__masteridentifier].cursor() + res=self.__cursor.execute(self.__sql) except Exception as e: # 铺获未知异常 try: errorcodes=tuple(eval(str(e)))[0] @@ -494,19 +491,22 @@ class mysql: self.__execute(typess) else: raise Exception(e) + else: + self.__patternerrorcount=0 + return res def get_exec_cursor(self): - """获取执行游标 + """获取执行游标(不推荐使用) 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ - cursor,bs=self.__setcursor("DML") + cursor=self.__setcursor("DML") return cursor def get_query_cursor(self): - """获取查询游标 + """获取查询游标(不推荐使用) 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL """ - cursor,bs=self.__setcursor("DQL") + cursor=self.__setcursor("DQL") return cursor # def __execute(self,typess='DQL'): # """执行sql语句 -- Gitee From f9075569365c9339d130ec10a96f8b5cd4739840 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 29 Aug 2021 21:57:55 +0800 Subject: [PATCH 12/41] k --- config/__init__.py | 2 +- utill/db/mysql.py | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 2c58f79..2d35b24 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.12.7' #项目版本 +kcweb['version']='4.12.8' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 2ece78a..7b9b9a4 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -331,7 +331,7 @@ class mysql: if self.__config['deploy']==0: # 集中式(单一服务器) if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0, self.__dbObjcount-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 else: @@ -340,33 +340,33 @@ class mysql: if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier slavecount=self.__dbcount-self.__config['master_num'] #从服务器数量 - types='master' + # types='master' if typess=='DQL': #数据查询语言DQL if self.__config['master_dql']: #主服务器可以执行DQL if slavecount: if random.randint(0,1): bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 else: bs=self.__slaveidentifier - types='slave' + # types='slave' self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 else: bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 else: bs=self.__slaveidentifier - types='slave' + # types='slave' self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 else: #数据操纵语言DML,数据定义语言DDL,数据控制语言DCL bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 self.__conn[bs][self.__dbobjident]['error']=0 @@ -391,7 +391,7 @@ class mysql: if self.__config['deploy']==0: # 集中式(单一服务器) if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0, self.__dbObjcount-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 res=self.__cursor.execute(self.__sql) @@ -402,33 +402,33 @@ class mysql: if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier slavecount=self.__dbcount-self.__config['master_num'] #从服务器数量 - types='master' + # types='master' if typess=='DQL': #数据查询语言DQL if self.__config['master_dql']: #主服务器可以执行DQL if slavecount: if random.randint(0,1): bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 else: bs=self.__slaveidentifier - types='slave' + # types='slave' self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 else: bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 else: bs=self.__slaveidentifier - types='slave' + # types='slave' self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 else: #数据操纵语言DML,数据定义语言DDL,数据控制语言DCL bs=self.__masteridentifier - types='master' + # types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 res=self.__cursor.execute(self.__sql) -- Gitee From 8b2650e3a98f5f94a0a74bca17c5f11f4923372f Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 29 Aug 2021 22:04:34 +0800 Subject: [PATCH 13/41] k --- utill/db/mysql.py | 160 +++++++--------------------------------------- 1 file changed, 22 insertions(+), 138 deletions(-) diff --git a/utill/db/mysql.py b/utill/db/mysql.py index 7b9b9a4..1c3558b 100644 --- a/utill/db/mysql.py +++ b/utill/db/mysql.py @@ -377,6 +377,21 @@ class mysql: else: self.__patternerrorcount=0 return self.__cursor + + def get_exec_cursor(self): + """获取执行游标(不推荐使用) + + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + """ + cursor=self.__setcursor("DML") + return cursor + def get_query_cursor(self): + """获取查询游标(不推荐使用) + + 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL + """ + cursor=self.__setcursor("DQL") + return cursor def __execute(self,typess='DQL'): """执行sql语句 @@ -391,7 +406,7 @@ class mysql: if self.__config['deploy']==0: # 集中式(单一服务器) if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier - # types='master' + types='master' self.__dbobjident=random.randint(0, self.__dbObjcount-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 res=self.__cursor.execute(self.__sql) @@ -402,33 +417,33 @@ class mysql: if self.__config['pattern']: # 长连接情况下 bs=self.__masteridentifier slavecount=self.__dbcount-self.__config['master_num'] #从服务器数量 - # types='master' + types='master' if typess=='DQL': #数据查询语言DQL if self.__config['master_dql']: #主服务器可以执行DQL if slavecount: if random.randint(0,1): bs=self.__masteridentifier - # types='master' + types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 else: bs=self.__slaveidentifier - # types='slave' + types='slave' self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 else: bs=self.__masteridentifier - # types='master' + types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 else: bs=self.__slaveidentifier - # types='slave' + types='slave' self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 else: #数据操纵语言DML,数据定义语言DDL,数据控制语言DCL bs=self.__masteridentifier - # types='master' + types='master' self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 res=self.__cursor.execute(self.__sql) @@ -494,137 +509,6 @@ class mysql: else: self.__patternerrorcount=0 return res - def get_exec_cursor(self): - """获取执行游标(不推荐使用) - - 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL - """ - cursor=self.__setcursor("DML") - return cursor - def get_query_cursor(self): - """获取查询游标(不推荐使用) - - 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL - """ - cursor=self.__setcursor("DQL") - return cursor - # def __execute(self,typess='DQL'): - # """执行sql语句 - - # 参数 type :数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL - # """ - # self.__setdbcount() - # # self.__DBsingle=self.__config['pattern'] - # self.__dbObjcount=self.__config['dbObjcount'] - # self.__errorcount=self.__config['break'] - # self.__connects() - # try: - # if self.__config['deploy']==0: # 集中式(单一服务器) - # if self.__config['pattern']: # 长连接情况下 - # bs=self.__masteridentifier - # types='master' - # self.__dbobjident=random.randint(0, self.__dbObjcount-1) - # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 - # res=self.__cursor.execute(self.__sql) - # else: - # self.__cursor=self.__conn[self.__masteridentifier].cursor() #获取随机数据库链接实例 - # res=self.__cursor.execute(self.__sql) - # elif self.__config['deploy']==1: # 分布式(主从服务器) - # if self.__config['pattern']: # 长连接情况下 - # bs=self.__masteridentifier - # slavecount=self.__dbcount-self.__config['master_num'] #从服务器数量 - # types='master' - # if typess=='DQL': #数据查询语言DQL - # if self.__config['master_dql']: #主服务器可以执行DQL - # if slavecount: - # if random.randint(0,1): - # bs=self.__masteridentifier - # types='master' - # self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) - # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 - # else: - # bs=self.__slaveidentifier - # types='slave' - # self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) - # self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 - # else: - # bs=self.__masteridentifier - # types='master' - # self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) - # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 - # else: - # bs=self.__slaveidentifier - # types='slave' - # self.__dbobjident=random.randint(0,self.__dbObjcount*slavecount-1) - # self.__cursor=self.__conn[self.__slaveidentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 从服务器 - # else: #数据操纵语言DML,数据定义语言DDL,数据控制语言DCL - # bs=self.__masteridentifier - # types='master' - # self.__dbobjident=random.randint(0,self.__dbObjcount*self.__config['master_num']-1) - # self.__cursor=self.__conn[self.__masteridentifier][self.__dbobjident]['obj'].cursor() #获取随机数据库链接实例 主服务器 - # res=self.__cursor.execute(self.__sql) - # self.__conn[bs][self.__dbobjident]['error']=0 - # else: - # self.__cursor=self.__conn[self.__masteridentifier].cursor() - # res=self.__cursor.execute(self.__sql) - # except Exception as e: # 铺获未知异常 - # try: - # errorcodes=tuple(eval(str(e)))[0] - # except: - # errorcodes=0 - # if errorcodes == 2013 or errorcodes == 2006 or errorcodes == 2003 or errorcodes == 1053 or errorcodes == 0: #2013连接丢失、2003数据库无法连接时、1053连接正在被关闭时、2006服务器丢失 - # if self.__config['pattern']: # 长连接情况下 - # if self.__config['cli']==True: - # if self.__config['debug']: - # print("等待连接数据库") - # if self.__patternerrorcount>self.__config['dbObjcount'] * self.__dbcount: #长连接情况下如果错误次数超过数据实例数量 关闭使用连接进行重连接 - # self.__patternerrorcount=0 - # if self.__config['deploy'] == 1: #分布式(主从服务器) 情况下 - # if self.__config['debug']: - # print("数据库连接失效,关闭主从连接池后重新连接") - # self.__closeconn(self.__masteridentifier) - # self.__closeconn(self.__slaveidentifier) - # time.sleep(10) - # self.__connects(typess) - # self.__execute(typess) - # else: - # if self.__config['debug']: - # print("数据库连接失效,关闭主连接池后重新连接") - # self.__closeconn(self.__masteridentifier) - # time.sleep(10) - # self.__connects(typess) - # self.__execute(typess) - # else: - # self.__patternerrorcount=self.__patternerrorcount+1 - # self.__execute(typess) - # else: - # self.__conn[bs][self.__dbobjident]['error']=self.__conn[bs][self.__dbobjident]['error']+1 #当前数据库连接实例异常错误数量 - # if self.__conn[bs][self.__dbobjident]['error'] > 0: - # try: - # # mysql.__conn[bs][self.__dbobjident]['obj'].close() #关闭当前实例 - # self.__closeconn(bs) - # except Exception as e: - # if self.__config['debug']: - # print("关闭异常",e) - # else: - # self.__connects(typess) - # self.__execute(typess) - # else: # 短连接情况下 - # if self.__config['debug']: - # print("服务器正在被关闭,关闭当前连接后重试") - # try: - # del mysql.__conn[self.__masteridentifier] - # mysql.__conn[self.__masteridentifier].close() #关闭当前实例 - # except Exception as e: - # if self.__config['debug']: - # print("关闭异常",e) - # self.__connects(typess) - # self.__execute(typess) - # else: - # raise Exception(e) - # else: - # self.__patternerrorcount=0 - # return res def query(self,sql): """执行sql语句 注:只支持单一服务器模式 -- Gitee From 38070b08772c5b3f3f13eb8137a26f61742a4398 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 06:38:51 +0800 Subject: [PATCH 14/41] k --- utill/queues.py | 56 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/utill/queues.py b/utill/queues.py index 40dd467..56391be 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -16,7 +16,12 @@ class model_kcweb_task(model.model): "code":model.dbtype.int(LEN=11,DEFAULT=2), #状态码 0成功 1失败 2等待中 3正在执行 4完成 "msg":model.dbtype.text(), #状态描述 "error":model.dbtype.text(), #异常信息 - "addtime":model.dbtype.int(LEN=11,DEFAULT=0) #添加时间 + "start":model.dbtype.int(LEN=11,DEFAULT=0), #进度条起始值 + "end":model.dbtype.int(LEN=11,DEFAULT=100), #进度条结束值 + "starts":model.dbtype.varchar(LEN=11,DEFAULT=0), #每秒钟进度条起始值增加多少 + "addtime":model.dbtype.int(LEN=11,DEFAULT=0), #添加时间 + "endtime":model.dbtype.int(LEN=11,DEFAULT=0), #结束时间 + "updtime":model.dbtype.int(LEN=11,DEFAULT=0) #更新时间 } class Queues(): __globalqueue=None @@ -45,29 +50,62 @@ class Queues(): try: value['target'](*value['args']) except Exception as e: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,"msg":"失败","error":str(e)}) + import traceback + print(traceback.print_exc()) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败","error":str(e)}) else: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"msg":"执行完成"}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) else: try: value['target']() except Exception as e: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,"msg":"失败","error":str(e)}) + import traceback + print(traceback.print_exc()) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败","error":str(e)}) else: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"msg":"执行完成"}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) else: time.sleep(1) - def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None): #add_queue + def delhist(): + """清除任务历史记录(包括 成功的 失败的 已完成的)""" + return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code","in",0,1,4).delete() + def setstart(taskid,start=1): + """设置进度条位置 + + start 支持1到99的整数 + """ + arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() + if arr: + start=int(start) + if start>=1 and start <=99: + dqsjc=int(time.time())-arr['updtime'] #当前时间差 + if dqsjc>=1: + starts=round(float((start-arr['start'])/dqsjc),2) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({"start":start,'starts':starts,'updtime':int(time.time())}) + return True + else: + return False + else: + return False + def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,end=100): #add_queue """添加队列 target 方法名 必须 - args 方法参数 非必须 如 + args 方法参数 非必须 如 (参数1,参数2) title 任务名称 describes 任务描述 + msg 状态描述 + + taskid 任务id + + start 进度条开始位置 + + end 进度条结束位置 + return taskid """ Queues.start() @@ -76,7 +114,7 @@ class Queues(): m = hashlib.md5() m.update((str(ttt)+str(random.randint(100000,999999))).encode(encoding='utf-8')) taskid=m.hexdigest() - task={"taskid":taskid,"title":title,"describes":describes,"code":2,"msg":msg,"error":"","addtime":ttt} + task={"taskid":taskid,"title":title,"describes":describes,"code":2,"msg":msg,"error":"","start":start,"end":end,"addtime":ttt,'starts':0,'endtime':0,'updtime':int(time.time())} key={"target":target,"args":args,"task":task} kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").insert(task) Queues.__globalqueue.put(key) @@ -106,7 +144,7 @@ class Queues(): return dict """ - return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").field("taskid,title,describes,code,msg,error,addtime").where("taskid",taskid).find() + return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() def iscomplete(): """判断对列中的任务是否全部执行完成 -- Gitee From 83390afe3299cfe91e40f3603b3fe02570ae57e0 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 06:39:31 +0800 Subject: [PATCH 15/41] k --- config/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 2d35b24..942d766 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.12.8' #项目版本 +kcweb['version']='4.12.9' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 27652e8..8035ee6 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.12.7' #项目版本 +confkcw['version']='4.12.9' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加websocket" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 -- Gitee From 3332f599b70166ea7e18741aad614048d2ebc758 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 06:42:41 +0800 Subject: [PATCH 16/41] k --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 8035ee6..98b7408 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ confkcw={} confkcw['name']='kcweb' #项目的名称 confkcw['version']='4.12.9' #项目版本 confkcw['description']='' #项目的简单描述 -confkcw['long_description']="增加websocket" #项目详细描述 +confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 confkcw['url']='' confkcw['author']='禄可集团-坤坤' #名字 -- Gitee From e77abcc7473b1538b9e249c29ee99ba4102d8011 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 06:43:05 +0800 Subject: [PATCH 17/41] k --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 98b7408..812f7be 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ def file_get_content(k): con='' return con confkcw={} -confkcw['name']='kcweb' #项目的名称 +confkcw['name']='kcweb' #项目的名称 confkcw['version']='4.12.9' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 -- Gitee From a6868d38c17640f1a0799e11276b0382f9fac089 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 16:11:36 +0800 Subject: [PATCH 18/41] k --- config/__init__.py | 2 +- setup.py | 4 ++-- utill/queues.py | 11 +++++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 942d766..a720b40 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.12.9' #项目版本 +kcweb['version']='4.13.1' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 812f7be..129b092 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ -# python setup.py sdist upload +# python3 setup.py sdist upload # twine upload --repository-url https://test.pypi.org/legacy/ dist/* #上传到测试 # pip install --index-url https://pypi.org/simple/ kcweb #安装测试服务上的kcweb pip3 install kcweb==4.12.4 -i https://pypi.org/simple/ ############################################# @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.12.9' #项目版本 +confkcw['version']='4.13.1' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 56391be..682ef86 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -80,7 +80,6 @@ class Queues(): if start>=1 and start <=99: dqsjc=int(time.time())-arr['updtime'] #当前时间差 if dqsjc>=1: - starts=round(float((start-arr['start'])/dqsjc),2) kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({"start":start,'starts':starts,'updtime':int(time.time())}) return True else: @@ -144,7 +143,15 @@ class Queues(): return dict """ - return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() + arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() + if arr: + dqsjc=arr['updtime']-arr['addtime'] + if dqsjc: + starts=round(arr['start']/dqsjc,2) + else: + starts=0 + arr['starts']=starts + return arr def iscomplete(): """判断对列中的任务是否全部执行完成 -- Gitee From f260862f2a46ea2527d8422849b4dc38bf0d7455 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 16:15:17 +0800 Subject: [PATCH 19/41] k --- utill/queues.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utill/queues.py b/utill/queues.py index 682ef86..6fc89b5 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -80,6 +80,7 @@ class Queues(): if start>=1 and start <=99: dqsjc=int(time.time())-arr['updtime'] #当前时间差 if dqsjc>=1: + starts=round(float((start-arr['start'])/dqsjc),2) kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({"start":start,'starts':starts,'updtime':int(time.time())}) return True else: @@ -146,11 +147,10 @@ class Queues(): arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() if arr: dqsjc=arr['updtime']-arr['addtime'] - if dqsjc: - starts=round(arr['start']/dqsjc,2) + if dqsjc and arr['start']>=1: + arr['starts']=round(arr['start']/dqsjc,2) else: - starts=0 - arr['starts']=starts + arr['starts']=round(arr['starts'],2) return arr def iscomplete(): """判断对列中的任务是否全部执行完成 -- Gitee From 636c6d5bcb31ce59f99031a02589306f93126d40 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 16:53:52 +0800 Subject: [PATCH 20/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index a720b40..dde1cd9 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.1' #项目版本 +kcweb['version']='4.13.2' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 129b092..c484864 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.1' #项目版本 +confkcw['version']='4.13.2' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 6fc89b5..6a5878a 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -87,7 +87,7 @@ class Queues(): return False else: return False - def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,end=100): #add_queue + def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,updtime=0): #add_queue """添加队列 target 方法名 必须 @@ -102,9 +102,9 @@ class Queues(): taskid 任务id - start 进度条开始位置 + start 进度条开始位置 (建议1到50) - end 进度条结束位置 + updtime 进度条更新时间 return taskid """ @@ -114,7 +114,10 @@ class Queues(): m = hashlib.md5() m.update((str(ttt)+str(random.randint(100000,999999))).encode(encoding='utf-8')) taskid=m.hexdigest() - task={"taskid":taskid,"title":title,"describes":describes,"code":2,"msg":msg,"error":"","start":start,"end":end,"addtime":ttt,'starts':0,'endtime':0,'updtime':int(time.time())} + end=100 + if not updtime: + updtime=ttt + task={"taskid":taskid,"title":title,"describes":describes,"code":2,"msg":msg,"error":"","start":start,"end":end,"addtime":ttt,'starts':0,'endtime':0,'updtime':updtime} key={"target":target,"args":args,"task":task} kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").insert(task) Queues.__globalqueue.put(key) -- Gitee From 3a046bfe74d66012452f0ca2e00f365b7d312003 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 19:34:12 +0800 Subject: [PATCH 21/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index dde1cd9..eb3dc13 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.2' #项目版本 +kcweb['version']='4.13.3' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index c484864..5a9767a 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.2' #项目版本 +confkcw['version']='4.13.3' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 6a5878a..77c96b9 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -153,7 +153,10 @@ class Queues(): if dqsjc and arr['start']>=1: arr['starts']=round(arr['start']/dqsjc,2) else: - arr['starts']=round(arr['starts'],2) + try: + arr['starts']=round(float(arr['starts']),2) + except: + arr['starts']=0 return arr def iscomplete(): """判断对列中的任务是否全部执行完成 -- Gitee From 6b44446c46b46301f74c52e5d5e951aba99b8b91 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 21:19:34 +0800 Subject: [PATCH 22/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 47 ++++++++++++++++++++++++++-------------------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index eb3dc13..70d654f 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.3' #项目版本 +kcweb['version']='4.13.4' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 5a9767a..1e247d4 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.3' #项目版本 +confkcw['version']='4.13.4' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 77c96b9..f461664 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -16,7 +16,7 @@ class model_kcweb_task(model.model): "code":model.dbtype.int(LEN=11,DEFAULT=2), #状态码 0成功 1失败 2等待中 3正在执行 4完成 "msg":model.dbtype.text(), #状态描述 "error":model.dbtype.text(), #异常信息 - "start":model.dbtype.int(LEN=11,DEFAULT=0), #进度条起始值 + "start":model.dbtype.varchar(LEN=11,DEFAULT=0), #进度条起始值 "end":model.dbtype.int(LEN=11,DEFAULT=100), #进度条结束值 "starts":model.dbtype.varchar(LEN=11,DEFAULT=0), #每秒钟进度条起始值增加多少 "addtime":model.dbtype.int(LEN=11,DEFAULT=0), #添加时间 @@ -50,8 +50,8 @@ class Queues(): try: value['target'](*value['args']) except Exception as e: - import traceback - print(traceback.print_exc()) + # import traceback + # print(traceback.print_exc()) kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败","error":str(e)}) else: kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) @@ -59,8 +59,8 @@ class Queues(): try: value['target']() except Exception as e: - import traceback - print(traceback.print_exc()) + # import traceback + # print(traceback.print_exc()) kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败","error":str(e)}) else: kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) @@ -69,24 +69,30 @@ class Queues(): def delhist(): """清除任务历史记录(包括 成功的 失败的 已完成的)""" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code","in",0,1,4).delete() - def setstart(taskid,start=1): - """设置进度条位置 + def setstart(taskid,start=0.001,describes=None): + """增加进度条起始位置 - start 支持1到99的整数 + start 支持0.001到10 """ - arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() - if arr: - start=int(start) - if start>=1 and start <=99: - dqsjc=int(time.time())-arr['updtime'] #当前时间差 - if dqsjc>=1: - starts=round(float((start-arr['start'])/dqsjc),2) - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({"start":start,'starts':starts,'updtime':int(time.time())}) - return True + if start>=0.001 and start<=10: + arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() + if arr: + start+=round(arr['start'],3) + if start>=0.01 and start <=99.99: + dqsjc=int(time.time())-arr['updtime'] #当前时间差 + if dqsjc>=1: + starts=round(float((float(start)-float(arr['start']))/dqsjc),3) + upddate={"start":start,'starts':starts,'updtime':int(time.time())} + if describes: + upddate['describes']=describes + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update(upddate) + return True + else: + return False else: return False else: - return False + False def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,updtime=0): #add_queue """添加队列 @@ -149,12 +155,13 @@ class Queues(): """ arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() if arr: + arr['start']=float(arr['start']) dqsjc=arr['updtime']-arr['addtime'] if dqsjc and arr['start']>=1: - arr['starts']=round(arr['start']/dqsjc,2) + arr['starts']=round(arr['start']/dqsjc,3) else: try: - arr['starts']=round(float(arr['starts']),2) + arr['starts']=round(float(arr['starts']),3) except: arr['starts']=0 return arr -- Gitee From 9bfeecd9d1dc4461afc08b142c893e304dd001ed Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 21:47:57 +0800 Subject: [PATCH 23/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 70d654f..5c2b7b2 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.4' #项目版本 +kcweb['version']='4.13.5' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 1e247d4..9aac8ee 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.4' #项目版本 +confkcw['version']='4.13.5' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index f461664..40ccc52 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -77,7 +77,7 @@ class Queues(): if start>=0.001 and start<=10: arr=kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).find() if arr: - start+=round(arr['start'],3) + start+=round(float(arr['start']),3) if start>=0.01 and start <=99.99: dqsjc=int(time.time())-arr['updtime'] #当前时间差 if dqsjc>=1: @@ -158,7 +158,7 @@ class Queues(): arr['start']=float(arr['start']) dqsjc=arr['updtime']-arr['addtime'] if dqsjc and arr['start']>=1: - arr['starts']=round(arr['start']/dqsjc,3) + arr['starts']=round(float(arr['start'])/dqsjc,3) else: try: arr['starts']=round(float(arr['starts']),3) -- Gitee From 606086dbbf1aba2e7dee206c5901a8123fea8d27 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 22:18:57 +0800 Subject: [PATCH 24/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 5c2b7b2..419a1a3 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.5' #项目版本 +kcweb['version']='4.13.6' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 9aac8ee..efb174a 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.5' #项目版本 +confkcw['version']='4.13.6' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 40ccc52..adee8fa 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -41,7 +41,7 @@ class Queues(): t.start() def __messagequeue(): # time.sleep(0.01) - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code","in",2,3).delete() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code in (2,3) and updtime<"+str(time.time-600)).delete() while True: if not Queues.__globalqueue.empty(): value=Queues.__globalqueue.get() -- Gitee From 0db452efe0e544fc878fc25d33ec949335092295 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 22:36:04 +0800 Subject: [PATCH 25/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 419a1a3..e69a51e 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.6' #项目版本 +kcweb['version']='4.13.7' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index efb174a..c6748eb 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.6' #项目版本 +confkcw['version']='4.13.7' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index adee8fa..2627c67 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -41,7 +41,8 @@ class Queues(): t.start() def __messagequeue(): # time.sleep(0.01) - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code in (2,3) and updtime<"+str(time.time-600)).delete() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2").delete() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code = 3 and updtime<"+str(int(time.time())-600)).delete() while True: if not Queues.__globalqueue.empty(): value=Queues.__globalqueue.get() -- Gitee From f3c3a1d133cab04251d709c12ad8aa919bf16032 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 23:39:54 +0800 Subject: [PATCH 26/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index e69a51e..4a768df 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.7' #项目版本 +kcweb['version']='4.13.8' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index c6748eb..0bfbee1 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.7' #项目版本 +confkcw['version']='4.13.8' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 2627c67..b53a3c1 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -41,8 +41,8 @@ class Queues(): t.start() def __messagequeue(): # time.sleep(0.01) - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2").delete() - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code = 3 and updtime<"+str(int(time.time())-600)).delete() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete() while True: if not Queues.__globalqueue.empty(): value=Queues.__globalqueue.get() -- Gitee From 43d7a9e7ddee427e0c061a1876b64479f7cb7555 Mon Sep 17 00:00:00 2001 From: kun Date: Sat, 4 Sep 2021 23:45:49 +0800 Subject: [PATCH 27/41] k --- utill/queues.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utill/queues.py b/utill/queues.py index b53a3c1..c808dff 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -39,6 +39,7 @@ class Queues(): t=threading.Thread(target=Queues.__messagequeue) t.daemon=True t.start() + def __messagequeue(): # time.sleep(0.01) kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() @@ -70,6 +71,9 @@ class Queues(): def delhist(): """清除任务历史记录(包括 成功的 失败的 已完成的)""" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code","in",0,1,4).delete() + def delwhere(where): + "通过where条件删除 (不推荐使用)" + return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where(where).delete() def setstart(taskid,start=0.001,describes=None): """增加进度条起始位置 -- Gitee From 5daf0a9ea189cd8c5521ea16c0a46bc57f423cd8 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 19:09:53 +0800 Subject: [PATCH 28/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 16 +++++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 4a768df..e980970 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.8' #项目版本 +kcweb['version']='4.13.9' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 0bfbee1..43cecfc 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.8' #项目版本 +confkcw['version']='4.13.9' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index c808dff..52596ca 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -1,7 +1,7 @@ from queue import Queue from .db import model from .db import sqlite as kcwsqlite -import threading,time,os,hashlib,random +import threading,time,os,hashlib,random,traceback queuesdbpath=os.path.split(os.path.realpath(__file__))[0]+"/Queues" class model_kcweb_task(model.model): "任务" @@ -52,18 +52,14 @@ class Queues(): try: value['target'](*value['args']) except Exception as e: - # import traceback - # print(traceback.print_exc()) - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败","error":str(e)}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败:"+str(e),"error":str(traceback.format_exc())}) else: kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) else: try: value['target']() except Exception as e: - # import traceback - # print(traceback.print_exc()) - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败","error":str(e)}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败:"+str(e),"error":str(traceback.format_exc())}) else: kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) else: @@ -74,6 +70,12 @@ class Queues(): def delwhere(where): "通过where条件删除 (不推荐使用)" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where(where).delete() + def setfield(taskid,key,value): + """设置指定字段(不建议使用)""" + try: + return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({key:value}) + except: + return False def setstart(taskid,start=0.001,describes=None): """增加进度条起始位置 -- Gitee From 3bf34f8013b6686c99132a533f4c2b652219fe42 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 19:48:13 +0800 Subject: [PATCH 29/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index e980970..d61f50e 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.9' #项目版本 +kcweb['version']='4.13.10' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 43cecfc..024e290 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.9' #项目版本 +confkcw['version']='4.13.10' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 52596ca..c7529f9 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -51,17 +51,17 @@ class Queues(): if value['args']: try: value['target'](*value['args']) - except Exception as e: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败:"+str(e),"error":str(traceback.format_exc())}) + except: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) else: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) else: try: value['target']() - except Exception as e: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"失败:"+str(e),"error":str(traceback.format_exc())}) + except: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) else: - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time()),"msg":"执行完成"}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) else: time.sleep(1) def delhist(): -- Gitee From a6ec96f275d24a3d80816d3bc25cb01d78337774 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 19:53:34 +0800 Subject: [PATCH 30/41] k --- setup.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 024e290..1e3058c 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ # pip install --index-url https://pypi.org/simple/ kcweb #安装测试服务上的kcweb pip3 install kcweb==4.12.4 -i https://pypi.org/simple/ ############################################# from setuptools import setup, find_packages,Extension -import os +import os,shutil def file_get_content(k): "获取文件内容" if os.path.isfile(k): @@ -56,4 +56,7 @@ setup( package_data = { '': ['*.html', '*.js','*.css','*.jpg','*.png','*.gif'], } -) \ No newline at end of file +) + +shutil.rmtree("dist") +shutil.rmtree("kcweb.egg-info") \ No newline at end of file -- Gitee From 0680c8ac19bf2e4cd3b6509bfd509431b437be51 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 19:54:06 +0800 Subject: [PATCH 31/41] k --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1e3058c..b2e01af 100644 --- a/setup.py +++ b/setup.py @@ -59,4 +59,5 @@ setup( ) shutil.rmtree("dist") -shutil.rmtree("kcweb.egg-info") \ No newline at end of file +shutil.rmtree("kcweb.egg-info") +os.remove("setup.py") \ No newline at end of file -- Gitee From c17c15de801eefed8363ce054f07625cb56a17d6 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 20:00:33 +0800 Subject: [PATCH 32/41] k --- utill/queues.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utill/queues.py b/utill/queues.py index c7529f9..54ca4db 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -100,7 +100,7 @@ class Queues(): return False else: False - def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,updtime=0): #add_queue + def insert(target,args=None,title="默认任务",describes="",msg='',taskid=None,start=0,updtime=0): #add_queue """添加队列 target 方法名 必须 -- Gitee From 15bdb46858e038ba2e59681f0de814b1089f4baa Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 20:07:15 +0800 Subject: [PATCH 33/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index d61f50e..6f15427 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.10' #项目版本 +kcweb['version']='4.13.11' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index b2e01af..b9a6624 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.10' #项目版本 +confkcw['version']='4.13.11' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 54ca4db..94072f1 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -70,8 +70,8 @@ class Queues(): def delwhere(where): "通过where条件删除 (不推荐使用)" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where(where).delete() - def setfield(taskid,key,value): - """设置指定字段(不建议使用)""" + def setfield(taskid,key='msg',value="完成"): + """设置指定字段""" try: return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({key:value}) except: -- Gitee From 78b54ac2b289c4e75761bdcc015b4bdd2f3d6cce Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 21:33:15 +0800 Subject: [PATCH 34/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 6f15427..507de5d 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.11' #项目版本 +kcweb['version']='4.13.12' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index b9a6624..5f6e87a 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.11' #项目版本 +confkcw['version']='4.13.12' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 94072f1..e734a7b 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -47,7 +47,7 @@ class Queues(): while True: if not Queues.__globalqueue.empty(): value=Queues.__globalqueue.get() - kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"msg":"正在执行","error":""}) + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""}) if value['args']: try: value['target'](*value['args']) @@ -70,8 +70,8 @@ class Queues(): def delwhere(where): "通过where条件删除 (不推荐使用)" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where(where).delete() - def setfield(taskid,key='msg',value="完成"): - """设置指定字段""" + def setfield(taskid,key,value): + """设置指定字段(不建议使用)""" try: return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid",taskid).update({key:value}) except: @@ -100,7 +100,7 @@ class Queues(): return False else: False - def insert(target,args=None,title="默认任务",describes="",msg='',taskid=None,start=0,updtime=0): #add_queue + def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,updtime=0): #add_queue """添加队列 target 方法名 必须 -- Gitee From b5dd090b597d552770ea9ddabeac765a327c5259 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 21:43:30 +0800 Subject: [PATCH 35/41] k --- config/__init__.py | 2 +- setup.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 507de5d..d1bd027 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.12' #项目版本 +kcweb['version']='4.13.13' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 5f6e87a..c82de8b 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.12' #项目版本 +confkcw['version']='4.13.13' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 @@ -58,6 +58,6 @@ setup( } ) -shutil.rmtree("dist") -shutil.rmtree("kcweb.egg-info") -os.remove("setup.py") \ No newline at end of file +# shutil.rmtree("dist") +# shutil.rmtree("kcweb.egg-info") +# os.remove("setup.py") \ No newline at end of file -- Gitee From f819fdb80c8bf554692166893b092617e59c74ff Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 23:13:25 +0800 Subject: [PATCH 36/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index d1bd027..e411f8d 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.13' #项目版本 +kcweb['version']='4.13.14' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index c82de8b..8d61ffa 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.13' #项目版本 +confkcw['version']='4.13.14' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index e734a7b..8afab3f 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -100,7 +100,7 @@ class Queues(): return False else: False - def insert(target,args=None,title="默认任务",describes="",msg='等待中',taskid=None,start=0,updtime=0): #add_queue + def insert(target,args=None,title="默认任务",describes='',msg='',taskid=None,start=0,updtime=0): #add_queue """添加队列 target 方法名 必须 -- Gitee From dd08ad2a7364df8e82e45e812617252fd1987350 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 23:18:26 +0800 Subject: [PATCH 37/41] k --- config/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index e411f8d..46ab093 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.14' #项目版本 +kcweb['version']='4.13.15' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 8d61ffa..366fe32 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.14' #项目版本 +confkcw['version']='4.13.15' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 -- Gitee From 30485edd824dd1f0586a6e3bcee3057d51de3608 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 5 Sep 2021 23:19:56 +0800 Subject: [PATCH 38/41] k --- setup.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 366fe32..e7fb0d9 100644 --- a/setup.py +++ b/setup.py @@ -56,8 +56,4 @@ setup( package_data = { '': ['*.html', '*.js','*.css','*.jpg','*.png','*.gif'], } -) - -# shutil.rmtree("dist") -# shutil.rmtree("kcweb.egg-info") -# os.remove("setup.py") \ No newline at end of file +) \ No newline at end of file -- Gitee From 87e2a73112e03b982b3ac7cb753d92c4765a5c11 Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 12 Sep 2021 01:14:45 +0800 Subject: [PATCH 39/41] k --- setup.py | 2 +- utill/queues.py | 55 +++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/setup.py b/setup.py index e7fb0d9..94b1f91 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.15' #项目版本 +confkcw['version']='4.13.16' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 8afab3f..51f9b5e 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -1,7 +1,7 @@ from queue import Queue from .db import model from .db import sqlite as kcwsqlite -import threading,time,os,hashlib,random,traceback +import threading,time,os,hashlib,random,traceback,multiprocessing queuesdbpath=os.path.split(os.path.realpath(__file__))[0]+"/Queues" class model_kcweb_task(model.model): "任务" @@ -25,8 +25,23 @@ class model_kcweb_task(model.model): } class Queues(): __globalqueue=None + # def start(): + # if not Queues.__globalqueue: + # if not os.path.isfile(queuesdbpath): + # model_kcweb_tasks=model_kcweb_task() + # model_kcweb_tasks.create_table() + # try: + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").find() + # except: + # model_kcweb_tasks=model_kcweb_task() + # model_kcweb_tasks.create_table() + # Queues.__globalqueue=Queue() + # t=threading.Thread(target=Queues.__messagequeue) + # t.daemon=True + # t.start() def start(): if not Queues.__globalqueue: + # print("启动") if not os.path.isfile(queuesdbpath): model_kcweb_tasks=model_kcweb_task() model_kcweb_tasks.create_table() @@ -35,18 +50,16 @@ class Queues(): except: model_kcweb_tasks=model_kcweb_task() model_kcweb_tasks.create_table() - Queues.__globalqueue=Queue() - t=threading.Thread(target=Queues.__messagequeue) - t.daemon=True + Queues.__globalqueue=multiprocessing.Queue() + t=multiprocessing.Process(target=Queues.messagequeue,args=(Queues.__globalqueue,)) t.start() - - def __messagequeue(): - # time.sleep(0.01) + def messagequeue(globalqueue): + # print("执行") kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete() while True: - if not Queues.__globalqueue.empty(): - value=Queues.__globalqueue.get() + if not globalqueue.empty(): + value=globalqueue.get() kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""}) if value['args']: try: @@ -64,6 +77,30 @@ class Queues(): kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) else: time.sleep(1) + # def __messagequeue(): + # # time.sleep(0.01) + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete() + # while True: + # if not Queues.__globalqueue.empty(): + # value=Queues.__globalqueue.get() + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""}) + # if value['args']: + # try: + # value['target'](*value['args']) + # except: + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) + # else: + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) + # else: + # try: + # value['target']() + # except: + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) + # else: + # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) + # else: + # time.sleep(1) def delhist(): """清除任务历史记录(包括 成功的 失败的 已完成的)""" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code","in",0,1,4).delete() -- Gitee From f3ed44427612fc022432d1e1c44ed6f524f47daf Mon Sep 17 00:00:00 2001 From: kun Date: Sun, 12 Sep 2021 02:58:56 +0800 Subject: [PATCH 40/41] k --- config/__init__.py | 2 +- setup.py | 2 +- utill/queues.py | 107 ++++++++++++++++++++++++--------------------- 3 files changed, 60 insertions(+), 51 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index 46ab093..ff5d74e 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.15' #项目版本 +kcweb['version']='4.13.17' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 94b1f91..73f0957 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.16' #项目版本 +confkcw['version']='4.13.17' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 diff --git a/utill/queues.py b/utill/queues.py index 51f9b5e..ae6b8c0 100644 --- a/utill/queues.py +++ b/utill/queues.py @@ -25,23 +25,9 @@ class model_kcweb_task(model.model): } class Queues(): __globalqueue=None - # def start(): - # if not Queues.__globalqueue: - # if not os.path.isfile(queuesdbpath): - # model_kcweb_tasks=model_kcweb_task() - # model_kcweb_tasks.create_table() - # try: - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").find() - # except: - # model_kcweb_tasks=model_kcweb_task() - # model_kcweb_tasks.create_table() - # Queues.__globalqueue=Queue() - # t=threading.Thread(target=Queues.__messagequeue) - # t.daemon=True - # t.start() - def start(): + __processglobalqueue=None + def __start(): if not Queues.__globalqueue: - # print("启动") if not os.path.isfile(queuesdbpath): model_kcweb_tasks=model_kcweb_task() model_kcweb_tasks.create_table() @@ -50,16 +36,55 @@ class Queues(): except: model_kcweb_tasks=model_kcweb_task() model_kcweb_tasks.create_table() - Queues.__globalqueue=multiprocessing.Queue() - t=multiprocessing.Process(target=Queues.messagequeue,args=(Queues.__globalqueue,)) + Queues.__globalqueue=Queue() + t=threading.Thread(target=Queues.__messagequeue) + t.daemon=True t.start() - def messagequeue(globalqueue): - # print("执行") + def __startprocess(): + if not Queues.__processglobalqueue: + if not os.path.isfile(queuesdbpath): + model_kcweb_tasks=model_kcweb_task() + model_kcweb_tasks.create_table() + try: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").find() + except: + model_kcweb_tasks=model_kcweb_task() + model_kcweb_tasks.create_table() + Queues.__processglobalqueue=multiprocessing.Queue() + t=multiprocessing.Process(target=Queues.messagequeueprocess,args=(Queues.__processglobalqueue,)) + t.daemon=True + t.start() + def messagequeueprocess(processglobalqueue): + """不支持外部调用""" + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete() + while True: + if not processglobalqueue.empty(): + value=processglobalqueue.get() + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""}) + if value['args']: + try: + value['target'](*value['args']) + except: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) + else: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) + else: + try: + value['target']() + except: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) + else: + kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) + else: + time.sleep(1) + def __messagequeue(): + # time.sleep(0.01) kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete() while True: - if not globalqueue.empty(): - value=globalqueue.get() + if not Queues.__globalqueue.empty(): + value=Queues.__globalqueue.get() kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""}) if value['args']: try: @@ -77,30 +102,6 @@ class Queues(): kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) else: time.sleep(1) - # def __messagequeue(): - # # time.sleep(0.01) - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete() - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete() - # while True: - # if not Queues.__globalqueue.empty(): - # value=Queues.__globalqueue.get() - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""}) - # if value['args']: - # try: - # value['target'](*value['args']) - # except: - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) - # else: - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) - # else: - # try: - # value['target']() - # except: - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())}) - # else: - # kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())}) - # else: - # time.sleep(1) def delhist(): """清除任务历史记录(包括 成功的 失败的 已完成的)""" return kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").where("code","in",0,1,4).delete() @@ -137,7 +138,7 @@ class Queues(): return False else: False - def insert(target,args=None,title="默认任务",describes='',msg='',taskid=None,start=0,updtime=0): #add_queue + def insert(target,args=None,title="默认任务",describes='',msg='',taskid=None,start=0,updtime=0,types=''): #add_queue """添加队列 target 方法名 必须 @@ -156,9 +157,14 @@ class Queues(): updtime 进度条更新时间 + types process表示使用进程执行 否则使用线程执行 + return taskid """ - Queues.start() + if types=='process': + Queues.__startprocess() + else: + Queues.__start() ttt=int(time.time()) if not taskid: m = hashlib.md5() @@ -170,7 +176,10 @@ class Queues(): task={"taskid":taskid,"title":title,"describes":describes,"code":2,"msg":msg,"error":"","start":start,"end":end,"addtime":ttt,'starts':0,'endtime':0,'updtime':updtime} key={"target":target,"args":args,"task":task} kcwsqlite.sqlite().connect(queuesdbpath).table("model_kcweb_queues").insert(task) - Queues.__globalqueue.put(key) + if types=='process': + Queues.__processglobalqueue.put(key) + else: + Queues.__globalqueue.put(key) return taskid def getall(pagenow=1,pagesize=20,where=None): """获取全部队列 -- Gitee From ef865fc634efad897113bbbc83275e903d9e7cbf Mon Sep 17 00:00:00 2001 From: kunkun Date: Thu, 23 Dec 2021 00:54:42 +0800 Subject: [PATCH 41/41] k --- common/autoload.py | 12 ++++++------ config/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/common/autoload.py b/common/autoload.py index 3c66b98..9d1c5ce 100644 --- a/common/autoload.py +++ b/common/autoload.py @@ -615,7 +615,7 @@ def list_to_tree(data, pk = 'id', pid = 'pid', child = 'lowerlist', root=0,child return arr -class zip: +class kcwebzip: def packzip(src,dst): "压缩" filelist = [] @@ -923,7 +923,7 @@ class create: """ """打包模块""" if os.path.exists(self.appname+"/"+self.modular+"/controller/"+plug): - zip.packzip(self.appname+"/"+self.modular+"/controller/"+plug,self.appname+"/"+self.modular+"/controller/"+plug+".zip") + kcwebzip.packzip(self.appname+"/"+self.modular+"/controller/"+plug,self.appname+"/"+self.modular+"/controller/"+plug+".zip") return True,"成功" else: return False,"失败" @@ -1036,7 +1036,7 @@ class create: else: return False,self.modular+"模块下找不到"+str(plug)+"插件" if os.path.isfile(self.appname+"/"+self.modular+"/controller/"+plug+".zip"):#安装打包好的插件 - zip.unzip_file(self.appname+"/"+self.modular+"/controller/"+plug+".zip",self.appname+"/"+self.modular+"/controller/"+plug+"/") + kcwebzip.unzip_file(self.appname+"/"+self.modular+"/controller/"+plug+".zip",self.appname+"/"+self.modular+"/controller/"+plug+"/") os.remove(self.appname+"/"+self.modular+"/controller/"+plug+".zip") if os.path.isfile(self.appname+"/"+self.modular+"/controller/"+plug+"/install.txt"): #安装依赖包 install_requires=[] @@ -1117,7 +1117,7 @@ class create: def packmodular(self): """打包模块""" if os.path.exists(self.appname+"/"+self.modular): - zip.packzip(self.appname+"/"+self.modular,self.appname+"/"+self.modular+".zip") + kcwebzip.packzip(self.appname+"/"+self.modular,self.appname+"/"+self.modular+".zip") return True,"成功" else: return False,"失败" @@ -1192,7 +1192,7 @@ class create: if chunk: f.write(chunk) f.close() - zip.unzip_file("./app.zip","./"+self.appname) + kcwebzip.unzip_file("./app.zip","./"+self.appname) os.remove("./app.zip") if not os.path.isfile("./server.py"): if "Windows" in platform.platform(): @@ -1282,7 +1282,7 @@ class create: break i+=1 if os.path.isfile(self.appname+"/"+self.modular+".zip"):#安装打包好的模块 - zip.unzip_file(self.appname+"/"+self.modular+".zip",self.appname+"/"+self.modular+"/") + kcwebzip.unzip_file(self.appname+"/"+self.modular+".zip",self.appname+"/"+self.modular+"/") os.remove(self.appname+"/"+self.modular+".zip") if os.path.isfile(self.appname+"/"+self.modular+"/install.txt"): #安装依赖包 diff --git a/config/__init__.py b/config/__init__.py index ff5d74e..cf52773 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -101,7 +101,7 @@ email['recNick']='' #默认收件人昵称 kcweb={} kcweb['name']='kcweb' #项目的名称 -kcweb['version']='4.13.17' #项目版本 +kcweb['version']='4.13.18' #项目版本 kcweb['description']='' #项目的简单描述 kcweb['long_description']='' #项目详细描述 kcweb['license']='MIT' #开源协议 mit开源 diff --git a/setup.py b/setup.py index 73f0957..75f1fa3 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def file_get_content(k): return con confkcw={} confkcw['name']='kcweb' #项目的名称 -confkcw['version']='4.13.17' #项目版本 +confkcw['version']='4.13.18' #项目版本 confkcw['description']='' #项目的简单描述 confkcw['long_description']="增加任务队列进度条" #项目详细描述 confkcw['license']='MIT License' #开源协议 mit开源 -- Gitee