我正在尝试在多个进程上调用一个函数。显而易见的解决方案是 python 的multiprocessing
模块。问题是该函数有副作用。它创建一个临时文件并注册该文件以在退出时删除atexit.register
和全球列表。下面应该演示这个问题(在不同的上下文中)。
import multiprocessing as multi
glob_data=[]
def func(a):
glob_data.append(a)
map(func,range(10))
print glob_data #[0,1,2,3,4 ... , 9] Good.
p=multi.Pool(processes=8)
p.map(func,range(80))
print glob_data #[0,1,2,3,4, ... , 9] Bad, glob_data wasn't updated.
有什么办法可以更新全局数据吗?
请注意,如果您尝试上面的脚本,您可能不应该从交互式解释器中尝试它,因为multiprocessing
需要模块__main__
可被子进程导入。
UPDATE
添加了global
func 中的关键字没有帮助——例如:
def func(a): #Still doesn't work.
global glob_data
glob_data.append(a)