你不能在进程之间共享内存(从技术上讲,你可以在基于fork的系统上,只要你不改变对象/影响ref count,这在现实世界中很少发生),你可以选择使用一个共享的结构(其中大多数在^{}下可用),这样可以为你进行同步/更新,或者只传递处理所需的数据,然后将结果缝合在一起。在
你的例子很简单,两种方法都可以在没有严重处罚的情况下工作,所以我只想找一位经理:import multiprocessing
import functools
def your_function(list1, list2, iterable):
i1 = 2 * iterable
i2 = 2 * iterable + 1
list1[i1] *= 2
list2[i2] += 2
if __name__ == "__main__": # a multi-processing guard for cross-platform use
manager = multiprocessing.Manager()
l1 = manager.list([1, 1, 1, 1, 1])
l2 = manager.list([2, 2, 2, 2, 2])
func = functools.partial(your_function, l1, l2)
pool = multiprocessing.Pool()
pool.map(func, [0, 1])
print(l1, l2) # [2, 1, 2, 1, 1] [2, 4, 2, 4, 2]
或者,如果您的用例更有利于在处理后缝合数据:
^{pr2}$
也就是说,输出不是您列出/期望的,而是基于您的函数应该发生的结果。在
另外,如果您的情况如此简单,那么您可能需要完全避开多处理—多处理所增加的开销(加上管理器同步)是不值得的,除非your_function()执行一些真正的CPU密集型任务。在