【進程 06】進程池

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('父進程結束')

代碼示例圖:

 

得到的結論有

  1. 模擬雙核,所以同時啓動 子進程0 和 子進程 1 
  2. 導入的類發生了改變 Processing 改爲 Pool(水池,此刻爲進程池) 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章