Python多处理器:如何使Pool和Manager协同工作



我正在努力了解Pool()Manager()如何在Python的多处理库中组合,以便在各个工作进程之间共享对象。在我的示例中,我希望有一个共享列表input_list,它应该对所有工作进程都是可访问的:

from multiprocessing import Pool, Manager
def f(x):
input_list.append(x)
return x**2
if __name__ == '__main__':
manager = Manager()
input_list = manager.list()
with Pool(processes=3) as pool:
results = pool.map(f, range(10))
print(input_list)

但是,我得到了NameError: name 'input_list' is not defined。知道为什么input_list没有被识别为共享对象吗?

我找到了一个使用functools的解决方案。共享列表需要作为一个附加参数传递给worker函数:

from multiprocessing import Pool, Manager
import functools
def f(x, input_list):
input_list.append(x)
return x**2
if __name__ == '__main__':
manager = Manager()
input_list = manager.list()
with Pool(processes=3) as pool:
results = pool.map(functools.partial(f, input_list=input_list), range(10))
print(input_list)

一个示例输出是:

[0, 3, 1, 4, 2, 5, 6, 7, 8, 9]

相关内容

  • 没有找到相关文章

最新更新