Python multiprocessing模塊的Pool類來表明進程池對象

#-*-coding:utf-8-*-
'''multiprocessing模塊提供了一個Pool類來表明進程池對象
    一、Pool能夠提供指定數量的進程供用戶調用,默認大小是CPU的核心數;
    二、當有新的請求提交到Pool中,若是池尚未滿,name就會建立一個新的進程用來執行改請求;
    三、但若是池中的進程數已經達到規定最大值,那麼該請求就會等待池中有進程結束,纔會建立新的進程。
'''
from multiprocessing import Pool
import os,time,random
def run_task(name):
    print("任務:%s(%s)運行..."%(name,os.getpid()))
    time.sleep(random.random()*3)
    print("任務:%s 結束!"%name)
if __name__=="__main__":
    print("當前進程ID: %s" %os.getpid())
    p=Pool(processes=3)
    for i in range(5):
        p.apply_async(run_task,args=(i,))
        print("等待全部進程結束。")
        p.close()
        p.join()
        print("全部進程結束")
'''Pool對象調用join()方法會等待全部子進程執行完畢,調用join()以前
必須先調用close(),調用close()以後就不能繼續添加新的Process了''

 

 

摘自《Python爬蟲開發與項目實戰》python

相關文章
相關標籤/搜索