【发布时间】:2018-09-21 01:59:50
【问题描述】:
我正在使用 Python 的 multiprocessing 创建一个并行应用程序。进程需要共享一些数据,为此我使用Manager。但是,我有一些常用函数需要调用哪些进程,哪些需要访问Manager 对象存储的数据。我的问题是我是否可以避免需要将Manager 实例作为参数传递给这些常用函数,而不是像全局一样使用它。换句话说,考虑下面的代码:
import multiprocessing as mp
manager = mp.Manager()
global_dict = manager.dict(a=[0])
def add():
global_dict['a'] += [global_dict['a'][-1]+1]
def foo_parallel(var):
add()
print var
num_processes = 5
p = []
for i in range(num_processes):
p.append(mp.Process(target=foo_parallel,args=(global_dict,)))
[pi.start() for pi in p]
[pi.join() for pi in p]
这运行良好并在我的机器上返回p=[0,1,2,3,4,5]。然而,这是“好形式”吗?这是一个好方法吗,就像定义 add(var) 并改为调用 add(var) 一样好?
【问题讨论】:
标签: python multithreading parallel-processing multiprocessing python-multiprocessing