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 是一个共享的字典,可以传递给子进程而不用复制,且该共享字典还可以传递到双重进程里。

posted @ 2024-05-16 09:20  海_纳百川  阅读(32)  评论(0编辑  收藏  举报
本站总访问量