python中deque的坑
2021/9/28 9:12:10
本文主要是介绍python中deque的坑,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
笔记,初次登录博客园,操作也不大熟练,尝试对工作进行归纳,限于作者水平,先对问题进行描述,后续会进行完善和补充。
推荐markdown编辑器——小书匠,初学用起来还不错
目录
- 问题描述
- 原因分析
- 问题解决
1. 前言
1.1 问题描述
本人近期使用python做多tcp连接的开发,编程环境及用法如下图所示,TCP连接采用class方式进行封装,数据刷新率约为0.5s,内部采用deque来对历史数据进行滑动平均。主程序中建立了多个tcp类对象,期望类对象各自独立工作。但实际打印发现,类中元素deque之间并未隔离。
编程语言 | python |
---|---|
数据协议 | TCP |
接口封装 | class |
数据存储 | deque |
1.2 程序
class TcpClient(): tcp = None # socket句柄 isWorking = 0 # 链路状态 thread_recv = None def __init__(self): super(TcpClient, self).__init__(IP, port, user, pswd) self.tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.tcp.settimeout(4) self.host = IP self.port = port self.user = user self.pswd = pswd # 建立tcp连接 try: addr = (self.host,self.port) self.tcp.connect(addr) except: err = (('ErrNo[0]:connect failed'),) return else: self.isWorking = 1 if not self.thread_recv: self.thread_recv=_thread.start_new_thread(self.tcp_recv,()) socket_recv=b'' def tcp_recv(self): while self.isWorking: try: data=self.tcp.recv(6000) except: time.sleep(0.1) continue else: self.socket_recv += data try: n=self.socket_recv.index(b'spect\0') if len(self.socket_recv)-n<self.infolen+4096: continue except: continue else: info=self.socket_recv[n+8:n+4096] self.fc_decode(self.isWorking,info) queue_average=deque(maxlen=16) def fc_spect(self,id, value): self.queue_average.append(value) print('--%s--%d--'%(self.host,len(self.queue_average)) if __name__ == '__main__': IPs = ['192.168.1.88','192.168.1.89'] port = 32000 user = 'root' pswd = '1' tcps = [] for IP in IPs: tcp = TcpClient(IP, port, user, pswd) if (tcp.isWorking) tcps.append(tcp) for tcp in tcps: print(id(tcp)) print(id(tcp.queue_average))
1.3 实际测试
2.原因分析
通过id分析,两个确实deque确实是独立的,但是在运行中,并没有显示一定的交互性,具体源引需要后续定位
3.解决办法
利用元组的不可修改性,采用掐头加尾的方式,重构了队列,测试表现良好
这篇关于python中deque的坑的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享