2017-05-12 134 views
0

我是python和多處理模塊的新手。我創建了一個我試圖完成提煉我的問題的簡化版本。問題在於,變量在被附加到的函數之外被調用時並不會更新/工作進程。使用多處理池添加列表

經過研究,我認爲這可能與隊列有關?不過,我認爲隊列更多的是在我不相信的過程之間共享內存,因爲每個列表都可以獨立添加。

from multiprocessing import Pool 

def build(array): 
    array.append("hello") 
    return array 


if __name__== '__main__': 
    x=["yo","sup"] 
    y=["blah", "blah"] 
    z=["apple","banana"] 
    w=["cats", "dogs"] 

    p=Pool(4) 
    p.map(build,[x,y,z,w]) 
    p.close() 
    p.join() 

    print x, y, z, w 

當我運行上面的代碼,它只是返回X,Y,Z,W爲估算而不附加「你好」,以每個列表,我想不通爲什麼。我知道如果我把打印語句放在功能build的末尾,它會輸出附加的列表。我也意識到,我可以做到以下幾點:

results = p.map(build,[x,y,z,w]) 

print results 

然而,在我的實際項目,我需要利用X,Y,Z,W後,不會傾向於指數結果拿到我名單尋找。無論如何,對工作流程之外的列表進行修改,可以這麼說嗎?

回答

1

每個進程都有自己的內存堆這樣名單就被複制到進程池工人內存和改變

+0

得到它謝謝! – user129818