0

我试图了解如何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不被识别为共享对象吗?

4

1 回答 1

0

我找到了使用functools. 共享列表需要作为附加参数传递给工作函数:

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]
于 2020-07-31T10:48:39.443 回答