我逃離How can I recover the return value of a function passed to multiprocessing.Process?以下解決方案:爲什麼多處理在同一個進程中運行的東西?
import multiprocessing
from os import getpid
def worker(procnum):
print('I am number %d in process %d' % (procnum, getpid()))
return getpid()
if __name__ == '__main__':
pool = multiprocessing.Pool(processes = 3)
print(pool.map(worker, range(5)))
這是應該的輸出是這樣的:
I am number 0 in process 19139
I am number 1 in process 19138
I am number 2 in process 19140
I am number 3 in process 19139
I am number 4 in process 19140
[19139, 19138, 19140, 19139, 19140]
而是我只得到
[4212, 4212, 4212, 4212, 4212]
如果我喂pool.map我使用了10個以上的流程,最多使用兩個不同的pid,範圍爲1,000,000。
爲什麼我的副本multiprocessing
似乎在同一個過程中運行一切?
你從這個例子中得到了什麼樣的例子?真正的情況是,要執行的代碼的速度非常快,以至於強迫它在多個線程之間分割工作沒有任何好處。 – Makoto
在我的機器上,我相當一致地獲得了所有pid的例子,並且在10個進程中執行了100個任務。所以這似乎有些依賴於上下文。 – Mark
請注意['map'方法](https://docs.python.org/3.5/library/multiprocessing.html#multiprocessing.pool.Pool.map)也有一個'chunksize'參數可以用來修復發送給子進程的塊的大小。所以你可以通過將'chunksize'設置爲更小的值來改變行爲。在任何情況下:'Pool'都是一種簡單的方式來分配任務,你不關心誰執行它們等等。它的默認設置應該可以在幾乎所有的情況下工作,所以不用擔心這直到你發現一個真正的問題與演出...... – Bakuriu