python多进程中嵌入多进程注意事项
例如代码:
from multiprocessing import Pool
p1 = Pool(4)
s = [1,2,3,4]
for i in s:
p1.apply_asny(某方法,args=(i))
p1.close()
p1.join()
此时,某方法中也有一个多进程设置,这样的话就是双重多进程,只要是传入的参数之间是没有关系的,那么就没有问题。
如果此时,最外层的apply_asny中的方法,是某个类的方法a,而方法a中又调用了方法b,这就会导致子进程和父进程有关联,会报出错误。
同时,对于传入的参数,如果参数存储空间比较小,比如一个int,可以传;而如果实参的存储比较大,比如实参是一个几百万个元素的list,每个进程都要复制一次该参数,就会非常耗时,所以正确做法,应该将存储较大的参数设置为共享变量
from multiprocessing import Manager
# 假设 loc_ad 已经存在且包含数据
loc_ad = {'key1': 'value1', 'key2': 'value2'}
# 使用 Manager 创建共享的字典
manager = Manager()
shared_loc_ad = manager.dict(loc_ad)
# 现在 shared_loc_ad 是一个共享的字典,可以传递给子进程而不用复制,且该共享字典还可以传递到双重进程里。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18195300,如有侵权联系删除