python多线程队列数据丢失怎么办_【多线程】Python进程,队列和锁相关的一些问题...

1.需求

一般的服务都提供一个代理或者监听进程,接收网络数据,然后根据数据类型分发到业务处理进程。

业务处理进程再根据实际情况处理或者创建新的进程线程。

我这里有一个listen_task监听进程,定义queue_from_net队列

__listen_control负责把网络数据缓存放入queue_from_net

__listen_handle负责从queue_from_net获取处理数据,并根据实际情况,

新建两个__query_schedule进程放入query_queue或者select_queue队列由__query_schedule处理

或者关闭__query_schedule进程

2、实现

__listen_control将网络数据放入到queue_from_net队列

__listen_handle根据start或者stop来创建或者终止__query_schedule进程

__query_schedule从队列中get处理

3.问题

__query_schedule在queue_from_listen_task队列get之前,打印出队列长度queue come in

启动成功__query_schedule一次之后,停止之后,再重新开始queue come in size为1,正常预期get出来之后queue_from_listen_task长度变为0

关闭之后,再启动,__query_schedule打印queue come in size为2,上一次get没有获取成功队列。

猜测是进程terminate的时候,队列锁没有释放,导致后面的队列GET不到

4.解决

在terminate进程之前,显示的把队列释放掉,task_done()

再次尝试,问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值