(2018-04-09.Python從Zero到One)二、python高級(jí)編程__2.1.8進(jìn)程池Pool

上一篇文章為:→2.1.7進(jìn)程的創(chuàng)建-Process子類

進(jìn)程池Pool

當(dāng)需要?jiǎng)?chuàng)建的子進(jìn)程數(shù)量不多時(shí)务冕,可以直接利用multiprocessing中的Process動(dòng)態(tài)成生多個(gè)進(jìn)程,但如果是上百甚至上千個(gè)目標(biāo),手動(dòng)的去創(chuàng)建進(jìn)程的工作量巨大盗誊,此時(shí)就可以用到multiprocessing模塊提供的Pool方法。

初始化Pool時(shí)隘弊,可以指定一個(gè)最大進(jìn)程數(shù)哈踱,當(dāng)有新的請求提交到Pool中時(shí),如果池還沒有滿梨熙,那么就會(huì)創(chuàng)建一個(gè)新的進(jìn)程用來執(zhí)行該請求开镣;但如果池中的進(jìn)程數(shù)已經(jīng)達(dá)到指定的最大值,那么該請求就會(huì)等待咽扇,直到池中有進(jìn)程結(jié)束邪财,才會(huì)創(chuàng)建新的進(jìn)程來執(zhí)行,請看下面的實(shí)例:

from multiprocessing import Pool
import os,time,random

def worker(msg):
    t_start = time.time()
    print("%s開始執(zhí)行,進(jìn)程號(hào)為%d"%(msg,os.getpid()))
    #random.random()隨機(jī)生成0~1之間的浮點(diǎn)數(shù)
    time.sleep(random.random()*2) 
    t_stop = time.time()
    print(msg,"執(zhí)行完畢质欲,耗時(shí)%0.2f"%(t_stop-t_start))

po=Pool(3) #定義一個(gè)進(jìn)程池树埠,最大進(jìn)程數(shù)3
for i in range(0,10):
    #Pool.apply_async(要調(diào)用的目標(biāo),(傳遞給目標(biāo)的參數(shù)元祖,))
    #每次循環(huán)將會(huì)用空閑出來的子進(jìn)程去調(diào)用目標(biāo)
    po.apply_async(worker,(i,))

print("----start----")
po.close() #關(guān)閉進(jìn)程池,關(guān)閉后po不再接收新的請求
po.join() #等待po中所有子進(jìn)程執(zhí)行完成嘶伟,必須放在close語句之后
print("-----end-----")

運(yùn)行結(jié)果:

----start----
0開始執(zhí)行,進(jìn)程號(hào)為21466
1開始執(zhí)行,進(jìn)程號(hào)為21468
2開始執(zhí)行,進(jìn)程號(hào)為21467
0 執(zhí)行完畢怎憋,耗時(shí)1.01
3開始執(zhí)行,進(jìn)程號(hào)為21466
2 執(zhí)行完畢,耗時(shí)1.24
4開始執(zhí)行,進(jìn)程號(hào)為21467
3 執(zhí)行完畢,耗時(shí)0.56
5開始執(zhí)行,進(jìn)程號(hào)為21466
1 執(zhí)行完畢绊袋,耗時(shí)1.68
6開始執(zhí)行,進(jìn)程號(hào)為21468
4 執(zhí)行完畢毕匀,耗時(shí)0.67
7開始執(zhí)行,進(jìn)程號(hào)為21467
5 執(zhí)行完畢,耗時(shí)0.83
8開始執(zhí)行,進(jìn)程號(hào)為21466
6 執(zhí)行完畢癌别,耗時(shí)0.75
9開始執(zhí)行,進(jìn)程號(hào)為21468
7 執(zhí)行完畢皂岔,耗時(shí)1.03
8 執(zhí)行完畢,耗時(shí)1.05
9 執(zhí)行完畢规个,耗時(shí)1.69
-----end-----
multiprocessing.Pool常用函數(shù)解析:

apply_async(func[, args[, kwds]]) :使用非阻塞方式調(diào)用func(并行執(zhí)行凤薛,堵塞方式必須等待上一個(gè)進(jìn)程退出才能執(zhí)行下一個(gè)進(jìn)程),args為傳遞給func的參數(shù)列表诞仓,kwds為傳遞給func的關(guān)鍵字參數(shù)列表缤苫;

apply(func[, args[, kwds]]):使用阻塞方式調(diào)用func

close():關(guān)閉Pool,使其不再接受新的任務(wù)墅拭;

terminate():不管任務(wù)是否完成活玲,立即終止;

join():主進(jìn)程阻塞谍婉,等待子進(jìn)程的退出舒憾, 必須在close或terminate之后使用;

apply堵塞式

from multiprocessing import Pool
import os,time,random

def worker(msg):
    t_start = time.time()
    print("%s開始執(zhí)行,進(jìn)程號(hào)為%d"%(msg,os.getpid()))
    #random.random()隨機(jī)生成0~1之間的浮點(diǎn)數(shù)
    time.sleep(random.random()*2) 
    t_stop = time.time()
    print(msg,"執(zhí)行完畢穗熬,耗時(shí)%0.2f"%(t_stop-t_start))

po=Pool(3) #定義一個(gè)進(jìn)程池镀迂,最大進(jìn)程數(shù)3
for i in range(0,10):
    po.apply(worker,(i,))

print("----start----")
po.close() #關(guān)閉進(jìn)程池,關(guān)閉后po不再接收新的請求
po.join() #等待po中所有子進(jìn)程執(zhí)行完成唤蔗,必須放在close語句之后
print("-----end-----")

運(yùn)行結(jié)果:

0開始執(zhí)行,進(jìn)程號(hào)為21532
0 執(zhí)行完畢探遵,耗時(shí)1.91
1開始執(zhí)行,進(jìn)程號(hào)為21534
1 執(zhí)行完畢,耗時(shí)1.72
2開始執(zhí)行,進(jìn)程號(hào)為21533
2 執(zhí)行完畢妓柜,耗時(shí)0.50
3開始執(zhí)行,進(jìn)程號(hào)為21532
3 執(zhí)行完畢箱季,耗時(shí)1.27
4開始執(zhí)行,進(jìn)程號(hào)為21534
4 執(zhí)行完畢,耗時(shí)1.05
5開始執(zhí)行,進(jìn)程號(hào)為21533
5 執(zhí)行完畢棍掐,耗時(shí)1.60
6開始執(zhí)行,進(jìn)程號(hào)為21532
6 執(zhí)行完畢藏雏,耗時(shí)0.25
7開始執(zhí)行,進(jìn)程號(hào)為21534
7 執(zhí)行完畢,耗時(shí)0.63
8開始執(zhí)行,進(jìn)程號(hào)為21533
8 執(zhí)行完畢作煌,耗時(shí)1.21
9開始執(zhí)行,進(jìn)程號(hào)為21532
9 執(zhí)行完畢掘殴,耗時(shí)0.60
----start----
-----end-----

下一篇文章為:→2.1.9進(jìn)程間通信-Queue
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粟誓,隨后出現(xiàn)的幾起案子奏寨,更是在濱河造成了極大的恐慌,老刑警劉巖努酸,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杜恰,居然都是意外死亡获诈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來几颜,“玉大人获列,你說我怎么就攤上這事⊥鱿樱” “怎么了嚎于?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挟冠。 經(jīng)常有香客問我,道長知染,這世上最難降的妖魔是什么肋僧? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮控淡,結(jié)果婚禮上嫌吠,老公的妹妹穿的比我還像新娘。我一直安慰自己掺炭,他們只是感情好辫诅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涧狮,像睡著了一般炕矮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勋篓,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天吧享,我揣著相機(jī)與錄音,去河邊找鬼譬嚣。 笑死钢颂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拜银。 我是一名探鬼主播殊鞭,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尼桶!你這毒婦竟也來了操灿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤泵督,失蹤者是張志新(化名)和其女友劉穎趾盐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡救鲤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年久窟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片本缠。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斥扛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丹锹,到底是詐尸還是另有隱情稀颁,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布楣黍,位于F島的核電站匾灶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锡凝。R本人自食惡果不足惜粘昨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窜锯。 院中可真熱鬧张肾,春花似錦、人聲如沸锚扎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驾孔。三九已至芍秆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翠勉,已是汗流浹背妖啥。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留对碌,地道東北人荆虱。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像朽们,于是被迫代替她去往敵國和親怀读。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1.進(jìn)程 1.1多線程的引入 現(xiàn)實(shí)生活中 有很多的場景中的事情是同時(shí)進(jìn)行的骑脱,比如開車的時(shí)候手和腳共同來駕駛汽車菜枷,再...
    TENG書閱讀 500評(píng)論 0 0
  • 1.1.1多任務(wù)的引入 什么叫“多任務(wù)”呢?簡單地說叁丧,就是操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)任務(wù)啤誊。打個(gè)比方岳瞭,你一邊在用瀏覽器...
    PythonMaO閱讀 469評(píng)論 0 1
  • @(python)[筆記] 目錄 一寝优、什么是進(jìn)程 1.1 進(jìn)程的概念 進(jìn)程的概念起源于操作系統(tǒng),是操作系統(tǒng)最核心的...
    CaiGuangyin閱讀 1,259評(píng)論 0 9
  • 一枫耳、進(jìn)程的概念 相信很多同學(xué)都聽說過windows、linux孟抗,MacOS都是多任務(wù)迁杨,多用戶的操作系統(tǒng)。那什么是多...
    轉(zhuǎn)身后的那一回眸閱讀 985評(píng)論 0 1
  • 人心難測凄硼,很多時(shí)候分辨一個(gè)人的話是真是假铅协,很難辨別是真心還是假意。我們都害怕付出的真心摊沉,我們很想摸透生活狐史,幸好時(shí)間...
    迷糊居士閱讀 499評(píng)論 0 1