【发布时间】:2012-04-12 07:11:25
【问题描述】:
我正在尝试在多个进程上调用一个函数。显而易见的解决方案是 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__ 可以被子进程导入。
更新
在 func 中添加 global 关键字没有帮助 - 例如:
def func(a): #Still doesn't work.
global glob_data
glob_data.append(a)
【问题讨论】:
标签: python parallel-processing