鑑於大量的搜索,我仍然很難得到使用多個進程運行的特定功能。要求是:proceses的多處理混淆 - 基礎
- 限制數
- 傳遞多個參數映射
的最新嘗試運行,但是time.sleep似乎影響到所有進程 - 執行時間相同 - 20秒,無論池是否用於多進程foo
或foo
直接調用(它應分別爲4/20秒)。我錯過了什麼?
from multiprocessing import Pool, Process, Lock
import os
import time
def foo(arg):
print '{} - {}'.format(arg[0], os.getpid())
time.sleep(1)
if __name__ == '__main__':
script_start_time = time.time()
pool = Pool(processes=5)
for i in range(20):
arg = [i, i]
pool.map(foo, [arg])
pool.close() #necessary to prevent zombies
pool.join() #wait for all processes to finish
print 'Execution time {}s '.format(time.time() - script_start_time)
結果:
0 - 5660
1 - 5672
2 - 5684
3 - 5704
4 - 5716
5 - 5660
6 - 5672
7 - 5684
8 - 5704
9 - 5716
10 - 5660
11 - 5672
12 - 5684
13 - 5704
14 - 5716
15 - 5660
16 - 5672
17 - 5684
18 - 5704
19 - 5716
Execution time 20.4240000248s
變化'map'到'map_async'。 – roippi
Pool.map阻塞,直到評估完所有傳遞的迭代爲止。使用所有參數調用映射一次,您將獲得併發性。 – Javier