2016-11-18 3 views
0

У меня есть функция, с которой я хочу передавать разные входные файлы одновременно. Я использую диспетчер многопроцессорности для выходного списка, 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

Проблема в matches = partial(function_x, nodes).
Здесь partial заменяет первый аргумент function_x (например, file) с nodes и вы получаете имя файла (строку) во втором аргументе, следовательно, ошибку.

Так что либо поменять местами аргументы function_x:

def function_x(nodes, filename): 

или использовать аргумент ключевых слов при построении частичной:

matches = partial(function_x, nodes=nodes) 
Смежные вопросы