2016-11-18 97 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)
這裏partialnodes代替第一個function_x參數(例如file),並且在第二個參數中獲得filename(一個字符串),因此是錯誤。

因此,無論交換function_x參數:

def function_x(nodes, filename): 

或構造部分時使用關鍵字參數:

matches = partial(function_x, nodes=nodes)