我有一个函数,我希望同时传递不同的输入文件。我正在使用多处理管理器作为输出列表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()
没有正确定义?
答案 0 :(得分:1)
问题出在matches = partial(function_x, nodes)
这里partial
用function_x
替换第一个file
参数(例如nodes
),然后在第二个参数中得到文件名(字符串),因此出错。
所以要么交换function_x参数:
def function_x(nodes, filename):
或在构造partial时使用关键字参数:
matches = partial(function_x, nodes=nodes)