def test_pop(c): qs=q.queqe_server() for i in range(c): d=qs.rpop("dev") d0="device %s"%i if not d==d0: raise Exception("expect %s but %s")
def newTransLog(request): #考勤记录实时监控 from devview import del_len from redis.server import queqe_server result={} lastid=int(request.REQUEST.get("lastid","-1")); if lastid==-1: return render_to_response("logcheck.html",{},RequestContext(request, {})) q=queqe_server() l=q.llen(REALTIME_EVENT) if lastid>l and lastid>=MAX_TRANS_IN_QUEQE/2: ll=lastid while lastid>l: if lastid>=MAX_TRANS_IN_QUEQE/2: lastid-=MAX_TRANS_IN_QUEQE/2 else: break print "Queqe Len: ", l, ", lastid: %s->%s"%(ll, lastid) if l>lastid: event_list=q.lrange(REALTIME_EVENT, 0, -lastid) lastid+=len(event_list) event_list=event_list[:MAX_REALTIME_COUNT] #id=%s\tPIN=%s\tEName=%s\tTTime=%s\tState=%s\tVerify=%s\tDevice=%s else: event_list=[] result['msg']='OK' result['data']=[dict([item.split("=") for item in line.split("\t")]) for line in event_list] result['lastId']=lastid result['ret']=len(event_list) return getJSResponse(smart_str(simplejson.dumps(result)))
def test_pop(c): qs = q.queqe_server() for i in range(c): d = qs.rpop("dev") d0 = "device %s" % i if not d == d0: raise Exception("expect %s but %s")
def clear_progress_cache(devs, session_key = ""): q_server=queqe_server() q_server.set("DEV_COMM_SYNC_%s"%session_key, "%d,0"%(len(devs)*2)) if devs: q_server.set("DEV_COMM_PROGRESS_%s"%session_key, "%s,0"%devs[0].alias.encode("gb18030")) else: q_server.set("DEV_COMM_PROGRESS_%s"%session_key, ",0") q_server.connection.disconnect()
def clear_progress_cache(devs, session_key=""): q_server = queqe_server() q_server.set("DEV_COMM_SYNC_%s" % session_key, "%d,0" % (len(devs) * 2)) if devs: q_server.set("DEV_COMM_PROGRESS_%s" % session_key, "%s,0" % devs[0].alias.encode("gb18030")) else: q_server.set("DEV_COMM_PROGRESS_%s" % session_key, ",0") q_server.connection.disconnect()
def run_writedata(index=0): connection = connections['default'] q=queqe_server() cursor=connection.cursor() print "-----------------------Start Writedata %s"%index parseLogDataInQueqe(connection, cursor, q) try: cursor.close() connection.close() except: pass q.connection.disconnect() print "-----------------------End Writedata %s"%index
def check_queqe_server(request=None): del_old_cmd() q_server = queqe_server() old_size = q_server.dbsize() sql_return = q_server.keys("sql_execute_*") if sql_return: q_server.delete(*sql_return) #q_server.flushall() q_server.bgsave() for i in iclock.objects.all(): check_cmd_queqe_by_device(i, q_server) info = "OK, keys in db: %s -> %s" % (old_size, q_server.dbsize()) if request: return HttpResponse(info) return info
def check_queqe_server(request=None): del_old_cmd() q_server=queqe_server() old_size=q_server.dbsize() sql_return=q_server.keys("sql_execute_*") if sql_return: q_server.delete(*sql_return) #q_server.flushall() q_server.bgsave() for i in iclock.objects.all(): check_cmd_queqe_by_device(i, q_server) info="OK, keys in db: %s -> %s"%(old_size,q_server.dbsize()) if request: return HttpResponse(info) return info
def trigger_cmd_device(cmd_obj): ''' 设备写入命令到队列 ''' old_cmd = 0 try: q_server = queqe_server() cln = cmd_obj.SN.new_command_list_name() if cmd_obj.CmdImmediately: q_server.rpush(cln, pickle.dumps( cmd_obj)) #---紧急就添加到头 python 对象序列化/反序列化 else: q_server.lpush(cln, pickle.dumps(cmd_obj)) #---添加到尾 #命令总数 cntkey = cmd_obj.SN.command_count_key() cnt = q_server.get(cntkey) if cnt is None: cnt = '0' if cnt.find('\x00'): cnt = cnt.strip('\x00') q_server.set(cntkey, "%d" % (int(cnt) + 1)) #---设备命令计数 old_cmd = q_server.llen(cln) #--- name 元素个数 q_server.connection.disconnect() except: print_exc() if not (cmd_obj.SN.comm_type == COMMU_MODE_PUSH_HTTP): #门禁设备不须通知 return pass if old_cmd: #若新命令队列不空,说明设备上次的命令还没有执行,不需要再次通知设备 return try: ip = cmd_obj.SN.ipaddress #---UDP 广播发送“R-CMD”通知该设备读取服务器下发的命令 sNotify = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if ip: sNotify.sendto("R-CMD", (ip, 4374)) except: print_exc()
def run(self): ''' 运行池中的任务 ''' from django.db import IntegrityError, DatabaseError conn=self.connection cursor=conn.cursor() q=queqe_server() print "Start Pool Connection %s"%self.index while not self.stop: ret=self.q.get() if ret: sql=ret[1] if sql=="_EXIT": break if sql=="CLOSE": self.cursor_ids.remove(ret[0]) continue print sql self.i+=1 data=None try: sret=cursor.execute(sql, ret[2]) except IntegrityError, e: data=(0, u"%s"%e) sret=-1 except DatabaseError, e: traceback.print_exc() conn.close() cursor=conn.cursor() try: sret=cursor.execute(u"%s"%ret[1], ret[2]) except Exception, e: traceback.print_exc() data=(1, u"%s"%e) sret=-1
def trigger_cmd_device(cmd_obj): ''' 设备写入命令到队列 ''' old_cmd=0 try: q_server=queqe_server() cln=cmd_obj.SN.new_command_list_name() if cmd_obj.CmdImmediately: q_server.rpush(cln, pickle.dumps(cmd_obj)) #---紧急就添加到头 python 对象序列化/反序列化 else: q_server.lpush(cln, pickle.dumps(cmd_obj)) #---添加到尾 #命令总数 cntkey=cmd_obj.SN.command_count_key() cnt=q_server.get(cntkey) if cnt is None: cnt='0' if cnt.find('\x00'): cnt=cnt.strip('\x00') q_server.set(cntkey, "%d"%(int(cnt)+1)) #---设备命令计数 old_cmd=q_server.llen(cln) #--- name 元素个数 q_server.connection.disconnect() except: print_exc() if not (cmd_obj.SN.comm_type==COMMU_MODE_PUSH_HTTP): #门禁设备不须通知 return pass if old_cmd: #若新命令队列不空,说明设备上次的命令还没有执行,不需要再次通知设备 return try: ip=cmd_obj.SN.ipaddress #---UDP 广播发送“R-CMD”通知该设备读取服务器下发的命令 sNotify = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if ip: sNotify.sendto("R-CMD", (ip, 4374)) except: print_exc()
def __init__(self): self.q = queqe_server()
def sync_total_progress(dev, tol, cur, session_key=""): q_server=queqe_server() q_server.set("DEV_COMM_SYNC_%s"%session_key, "%d,%d"%(tol, cur)) q_server.set("DEV_COMM_PROGRESS_%s"%session_key, "%s,0"%dev.encode("gb18030")) q_server.connection.disconnect()
def sync_total_progress(dev, tol, cur, session_key=""): q_server = queqe_server() q_server.set("DEV_COMM_SYNC_%s" % session_key, "%d,%d" % (tol, cur)) q_server.set("DEV_COMM_PROGRESS_%s" % session_key, "%s,0" % dev.encode("gb18030")) q_server.connection.disconnect()
def runsql(count=10): from mysite.utils import test_and_open_tcp_port q=queqe_server() #---redis 键值服务器队列 test_and_open_tcp_port(settings.SQL_POOL_PORT) #打开TCP端口,让别的程序知道自己已经启动 if settings.DATABASE_ENGINE=="sqlite3": #避免sqlite3的文件互锁 count=1 wt=[] for i in range(count): t=PoolConn(i) wt.append(t) t.start() time.sleep(0.2) report_time=time.time()+60 #1分钟, 报告一次查询数量 end_time=time.time()+60*60*2 #2*60分钟,退出进程,系统会重新启动该进程————解决python占用内存越来越大的问题 while True: #监控线程,如果其结束,重新创建 try: ret=q.rpop("sql_execute") if ret is None: #队列中没有sql语句 now_time=time.time() if now_time>report_time: print "total %s queries" % sum([wt[i].i for i in range(count)]) report_time=now_time+60 #1分钟 if now_time>end_time: #退出进程 print "Exit process" break time.sleep(0.02) continue except redis.exceptions.ConnectionError: #读队列错,可能是队列服务器没有开 #start_q_server() continue except: time.sleep(0.2) continue try: ret=pickle.loads(ret) cid, sql, param=ret except Exception, e: traceback.print_exc() data=(3, u"%s"%e) sret=-1 continue #发送给处理过相同cid的线程处理 pt=None for i in range(count): t=wt[i] if not t.isAlive(): wt[i]=None del t t=PoolConn(i) wt[i]=t t.start() if t.append_sql_by_id(ret): pt=t break; #新的cid的话随机发送给某个线程 if pt is None: i=int(cid)/8%count pt=wt[i] if not pt.isAlive(): wt[i]=None del pt pt=PoolConn(i) wt[i]=pt pt.start() pt.append_sql(ret)
def end_sync_userinfo(session_key=""): q_server = queqe_server() q_server.delete("DEV_COMM_SYNC_%s" % session_key) q_server.delete("DEV_COMM_PROGRESS_%s" % session_key) q_server.connection.disconnect()
def test_push(c): qs = q.queqe_server() for i in range(c): qs.lpush("dev", "device %s" % i)
def __init__(self): self.q=queqe_server()
def end_sync_userinfo(session_key=""): q_server=queqe_server() q_server.delete("DEV_COMM_SYNC_%s"%session_key) q_server.delete("DEV_COMM_PROGRESS_%s"%session_key) q_server.connection.disconnect()
def test_push(c): qs=q.queqe_server() for i in range(c): qs.lpush("dev", "device %s"%i)