在下面的示例代碼中,我想恢復函數worker
的返回值。我怎麼能這樣做呢?這個值在哪裏存儲?如何恢復傳遞給multiprocessing.Process的函數的返回值?
示例代碼:
import multiprocessing
def worker(procnum):
'''worker function'''
print str(procnum) + ' represent!'
return procnum
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print jobs
輸出:
0 represent!
1 represent!
2 represent!
3 represent!
4 represent!
[<Process(Process-1, stopped)>, <Process(Process-2, stopped)>, <Process(Process-3, stopped)>, <Process(Process-4, stopped)>, <Process(Process-5, stopped)>]
我似乎無法找到存儲在jobs
對象相關的屬性。
由於提前, BLZ
我建議使用一個['multiprocessing.Queue'](https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue),而不是一個'管理器'在這裏。使用'Manager'需要產生一個全新的進程,當'Queue'執行時這是過度的。 – dano
@dano:我想知道,如果我們使用Queue()對象,我們不能確定每個進程返回值的順序。我的意思是如果我們需要結果的順序,做下一步工作。我們如何確定哪個輸出來自哪個進程 – Catbuilts
@Cbubuilts您可以從每個進程返回一個元組,其中一個值是您關心的實際返回值,另一個是來自進程的唯一標識符。但我也想知道爲什麼你需要知道哪個進程正在返回哪個值。如果你真的需要了解這個過程,或者你需要關聯你的輸入列表和輸出列表?在這種情況下,我建議使用'multiprocessing.Pool.map'來處理你的工作項目清單。 – dano