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()

猜你喜欢

转载自blog.csdn.net/qq_43373608/article/details/108418442