zoukankan      html  css  js  c++  java
  • 【多线程】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队列

    image

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

    image

    __query_schedule从队列中get处理

    image

    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没有获取成功队列。

    image

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

    4.解决

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

    image

    再次尝试,问题解决

    好记性不如烂笔头
  • 相关阅读:
    递归函数 二分查找
    内置函数
    迭代器 生成器 推导式
    装饰器函数的有用信息
    函数名 闭包 装饰器
    动态参数 命名空间
    C#_LINQ(LINQ to Entities)
    C#_MVC 自定义AuthorizeAttribute实现权限管理
    C#_MVC3之使用Authorize简单的验证登录(一)
    C#_MVC_分页update
  • 原文地址:https://www.cnblogs.com/inns/p/5633637.html
Copyright © 2011-2022 走看看