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