比方說,我有一個空列表my_list
和5流程pr1, pr2, pr3, pr4, pr5
,在他們每個人的附加的東西到我的清單。相互列表中的多個進程
我的問題是:是這樣的可能嗎?它會表現正常還是會出現錯誤?
比方說,我有一個空列表my_list
和5流程pr1, pr2, pr3, pr4, pr5
,在他們每個人的附加的東西到我的清單。相互列表中的多個進程
我的問題是:是這樣的可能嗎?它會表現正常還是會出現錯誤?
您的所有進程都應用了相同的功能,但對於不同的輸入?如果是這種情況,則使用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)]
。
如果這些過程是獨立的,那麼像這樣的東西是不可能的。至少不是沒有插槽之類的附加機制(這大大增加了複雜性)。
如果這些是通過multiprocessing
和my_list
創建的,那麼每個進程都有自己的列表副本。
再次在multiprocessing
如果您將my_list
定義爲multiprocessing.Queue
那麼確實這將是進程之間的共享結構。
因爲每個過程都有自己的記憶,我認爲是不可能的。你應該使用Queue進行這個操作 –