python pool 和 quene冲突

在多进程之间传递数据

一定要使用 manager

多进程之间传参 一定不要直接传递 list 等 还没有序列化的参数 这样会照成程序莫名崩溃,并且还没有任何提示

正确代码


def dealJob(q,rl):
    # jobs=json.loads(jobs)
    # l=pickle.loads(l)
    while True:
        rl.acquire()
        try:
            time.sleep(1)
            a=q.get()
            print(a)
            q.put(a+1)
        except Exception as e:
            print(e)
        finally:
            rl.release()

if __name__ == '__main__':
    #with Pool(processes=  os.cpu_count() - 2 if os.cpu_count() > 3 else 1  ) as pool:
    
    # 错误的写法 这样写, 生成的 quene  解释器 是无法进行序列化的 , 
    # 多进程之间传参 一定不要直接传递 list 等 还没有序列化的参数 这样会照成程序莫名崩溃,并且还没有任何提示
    # q = Quene()  
    m = Manager()
    q = m.Queue()
    q.put(1)
    rl = m.RLock() 
    with Pool(processes=  2  ) as pool:
        rDealJob = pool.apply_async(dealJob,args=(q,rl,))
        
        pool.close()
        pool.join()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuemake999

请我喝茶呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值