多处理列表管理器

时间:2016-11-18 09:58:30

标签: python multiprocessing

我有一个函数,我希望同时传递不同的输入文件。我正在使用多处理管理器作为输出列表nodes。我将其定义为nodes = manager.list()

file_list = [file_1,file_2,file_3]

def function_x(file,nodes):
    nodes.extend(some_data)     
    print(type(nodes))

if __name__ == "__main__":
    manager = multiprocessing.Manager()
    nodes = manager.list()
    matches = partial(function_x,nodes)
    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
    pool.map(function_x,file_list)

尽管将nodes定义为列表,但我收到以下错误:AttributeError: 'str' object has no attribute 'extend'

当我打印nodes类型时,我会回来string。为什么nodes = manager.list()没有正确定义?

1 个答案:

答案 0 :(得分:1)

问题出在matches = partial(function_x, nodes) 这里partialfunction_x替换第一个file参数(例如nodes),然后在第二个参数中得到文件名(字符串),因此出错。

所以要么交换function_x参数:

def function_x(nodes, filename):

或在构造partial时使用关键字参数:

matches = partial(function_x, nodes=nodes)