2016-08-31 29 views
1

比方說,我有一個空列表my_list和5流程pr1, pr2, pr3, pr4, pr5,在他們每個人的附加的東西到我的清單。相互列表中的多個進程

我的問題是:是這樣的可能嗎?它會表現正常還是會出現錯誤?

+1

因爲每個過程都有自己的記憶,我認爲是不可能的。你應該使用Queue進行這個操作 –

回答

1

您的所有進程都應用了相同的功能,但對於不同的輸入?如果是這種情況,則使用Pool.map()multiprocessing爲宜:

from multiprocessing import Pool 

n_processes = 5 #number of processes to use 
input = [0.,1.,2.,3.] #some input 

def f(x): 
    #the function being applied on each thread 
    return x**2. #for example 

p = Pool(n_processes) 
my_list = p.map(f,input) 
p.close() #close the pool now you're finished with it 

所以函數f(x)被施加到不同的輸入上的每個處理,然後輸出被收集在一個列表(相當於你的'my_list'是空的開始)。輸出數組按照與輸入數組相同的方式排序,即如果input = [x1,x2,x3,x4,x5]然後是output=[f(x1),f(x2),f(x3),f(x4),f(x5)]

+0

我完成後,我想關閉他們/對他們做任何事情? – SnuKies

+0

對不起,一旦你完成了,你會寫'p.close()'。 –

+0

我不知道爲什麼,但是每當我運行你的程序時,我的電腦就會死機。你能看看嗎? – SnuKies

1

如果這些過程是獨立的,那麼像這樣的東西是不可能的。至少不是沒有插槽之類的附加機制(這大大增加了複雜性)。

如果這些是通過multiprocessingmy_list創建的,那麼每個進程都有自己的列表副本。

再次在multiprocessing如果您將my_list定義爲multiprocessing.Queue那麼確實這將是進程之間的共享結構。

+0

但是如果我的進程會返回每個列表,那麼我可以在我需要的列表中連接它們,對吧? – SnuKies

+0

@SnuKies通常一個進程不會返回任何東西。它只是結束它的執行。不過Python確實提供了一個簡潔的抽象。你在談論'multiprocessing.map'嗎?我不確定,試試看。 – freakish

+0

我真的很陌生'多處理'。 目前我正在使用'multiprocessing'來安裝多個組件,並且我認爲我可以使用'multiprocessing'來確定哪些組件自上次安裝以來沒有發生變化。 – SnuKies