import os
import random
import time
from multiprocessing import Pool
# Pool 進程池
def run(name):
print('子進程%d啓動--%s' % (name, os.getpid()))
start = time.time()
# 隨機休眠1~3秒
time.sleep(random.randint(1, 3))
end = time.time()
print('子進程%d結束--%s--耗時%0.2f' % (name, os.getpid(), end - start))
if __name__ == '__main__':
print('父進程啓動')
# 進程池 Pool傳入2 模擬雙核 同時可以啓動2個子進程
p = Pool(2)
for i in range(5):
# 創建進程放入進程池
p.apply_async(run, args=(i,))
# 在調用join之前必須先調用close,調用close之後不能添加新的進程
p.close()
# 進程池對象調用join,會等待進程池中所有的子進程結束完畢再去執行父進程
p.join()
print('父進程結束')
代碼示例圖:
得到的結論有
- 模擬雙核,所以同時啓動 子進程0 和 子進程 1
- 導入的類發生了改變 Processing 改爲 Pool(水池,此刻爲進程池)