在多进程之间传递数据
一定要使用 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()