python的進(jìn)程

1.進(jìn)程Process

multiprocessing模塊提供了一個Process類來創(chuàng)建一個進(jìn)程對象

創(chuàng)建子進(jìn)程時顽照,只需要傳入一個執(zhí)行函數(shù)和函數(shù)的參數(shù)乏冀,創(chuàng)建一個Process實例筐付,用start()方法啟動啊片,這樣創(chuàng)建進(jìn)程比fork()還要簡單涛浙。

join()方法可以等待子進(jìn)程結(jié)束后再繼續(xù)往下運(yùn)行说庭,相當(dāng)于阻塞進(jìn)程然磷,通常用于進(jìn)程間的同步。

Process語法結(jié)構(gòu)如下:

Process([group [, target [, name [, args [, kwargs]]]]])

target:表示這個進(jìn)程實例所調(diào)用對象(多為函數(shù))刊驴;

args:表示調(diào)用對象的位置參數(shù)元組姿搜;

kwargs:表示調(diào)用對象的關(guān)鍵字參數(shù)字典;

name:為當(dāng)前進(jìn)程實例的別名捆憎;

group:大多數(shù)情況下用不到舅柜;

Process類常用方法:

is_alive():判斷進(jìn)程實例是否還在執(zhí)行;

join([timeout]):是否等待進(jìn)程實例執(zhí)行結(jié)束躲惰,或等待多少秒致份;

start():啟動進(jìn)程實例(創(chuàng)建子進(jìn)程);

run():如果沒有給定target參數(shù)础拨,對這個對象調(diào)用start()方法時氮块,就將執(zhí)行對象中的run()方法;

terminate():不管任務(wù)是否完成诡宗,立即終止滔蝉;

Process類常用屬性:

name:當(dāng)前進(jìn)程實例別名,默認(rèn)為Process-N塔沃,N為從1開始遞增的整數(shù)蝠引;

pid:當(dāng)前進(jìn)程實例的PID值;

Process類調(diào)用實例

process類調(diào)用實例
調(diào)用結(jié)果

2.進(jìn)程池Pool

當(dāng)需要創(chuàng)建的子進(jìn)程數(shù)量不多時芳悲,可以直接利用multiprocessing中的Process動態(tài)成生多個進(jìn)程立肘,但如果是上百甚至上千個目標(biāo),手動的去創(chuàng)建進(jìn)程的工作量巨大名扛,此時就可以用到multiprocessing模塊提供的Pool方法谅年。

初始化Pool時,可以指定一個最大進(jìn)程數(shù)肮韧,當(dāng)有新的請求提交到Pool中時融蹂,如果池還沒有滿,那么就會創(chuàng)建一個新的進(jìn)程用來執(zhí)行該請求弄企;但如果池中的進(jìn)程數(shù)已經(jīng)達(dá)到指定的最大值超燃,那么該請求就會等待,直到池中有進(jìn)程結(jié)束拘领,才會創(chuàng)建新的進(jìn)程來執(zhí)行

multiprocessing.Pool常用函數(shù)解析:

apply_async(func[, args[, kwds]]) :使用非阻塞方式調(diào)用func(并行執(zhí)行意乓,堵塞方式必須等待上一個進(jìn)程退出才能執(zhí)行下一個進(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之后使用爪模;

Pool調(diào)用實例

pool 調(diào)用實例
demo 調(diào)用結(jié)果

3.進(jìn)程間的通訊 通訊隊列Queue

可以使用multiprocessing模塊的Queue實現(xiàn)多進(jìn)程之間的數(shù)據(jù)傳遞,Queue本身是一個消息列隊程序

初始化Queue()對象時(例如:q=Queue())荚藻,若括號中沒有指定最大可接收的消息數(shù)量屋灌,或數(shù)量為負(fù)值,那么就代表可接受的消息數(shù)量沒有上限(直到內(nèi)存的盡頭)鞋喇;

Queue.qsize():返回當(dāng)前隊列包含的消息數(shù)量声滥;

Queue.empty():如果隊列為空,返回True侦香,反之False 落塑;

Queue.full():如果隊列滿了,返回True,反之False罐韩;

Queue.get([block[, timeout]]):獲取隊列中的一條消息憾赁,然后將其從列隊中移除,block默認(rèn)值為True散吵;

1)如果block使用默認(rèn)值龙考,且沒有設(shè)置timeout(單位秒),消息列隊如果為空矾睦,此時程序?qū)⒈蛔枞ㄍT谧x取狀態(tài))晦款,直到從消息列隊讀到消息為止,如果設(shè)置了timeout枚冗,則會等待timeout秒缓溅,若還沒讀取到任何消息,則拋出"Queue.Empty"異常赁温;

2)如果block值為False坛怪,消息列隊如果為空,則會立刻拋出"Queue.Empty"異常股囊;

Queue.get_nowait():相當(dāng)Queue.get(False)袜匿;

Queue.put(item,[block[, timeout]]):將item消息寫入隊列,block默認(rèn)值為True稚疹;

1)如果block使用默認(rèn)值居灯,且沒有設(shè)置timeout(單位秒),消息列隊如果已經(jīng)沒有空間可寫入,此時程序?qū)⒈蛔枞ㄍT趯懭霠顟B(tài))穆壕,直到從消息列隊騰出空間為止待牵,如果設(shè)置了timeout,則會等待timeout秒喇勋,若還沒空間,則拋出"Queue.Full"異常偎行;

2)如果block值為False川背,消息列隊如果沒有空間可寫入,則會立刻拋出"Queue.Full"異常蛤袒;

Queue.put_nowait(item):相當(dāng)Queue.put(item, False)熄云;

Queue的基本使用

利用Queue 完成進(jìn)程間的通訊
程序調(diào)用結(jié)果

4.進(jìn)程池中的通信

如果要使用Pool創(chuàng)建進(jìn)程,就需要使用multiprocessing.Manager()中的Queue()妙真,而不是multiprocessing.Queue()

既:

?q = Manager().Queue();?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缴允,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子珍德,更是在濱河造成了極大的恐慌练般,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锈候,死亡現(xiàn)場離奇詭異薄料,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)泵琳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門摄职,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人获列,你說我怎么就攤上這事谷市。” “怎么了击孩?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵迫悠,是天一觀的道長。 經(jīng)常有香客問我溯壶,道長及皂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任且改,我火速辦了婚禮验烧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘又跛。我一直安慰自己碍拆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著感混,像睡著了一般端幼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弧满,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天婆跑,我揣著相機(jī)與錄音,去河邊找鬼庭呜。 笑死滑进,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的募谎。 我是一名探鬼主播扶关,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼数冬!你這毒婦竟也來了节槐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤拐纱,失蹤者是張志新(化名)和其女友劉穎铜异,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戳玫,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熙掺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咕宿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片币绩。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖府阀,靈堂內(nèi)的尸體忽然破棺而出缆镣,到底是詐尸還是另有隱情,我是刑警寧澤试浙,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布董瞻,位于F島的核電站,受9級特大地震影響田巴,放射性物質(zhì)發(fā)生泄漏钠糊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一壹哺、第九天 我趴在偏房一處隱蔽的房頂上張望抄伍。 院中可真熱鬧,春花似錦管宵、人聲如沸截珍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岗喉。三九已至秋度,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钱床,已是汗流浹背荚斯。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诞丽,地道東北人鲸拥。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像僧免,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捏浊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

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

  • 1.進(jìn)程 1.1多線程的引入 現(xiàn)實生活中 有很多的場景中的事情是同時進(jìn)行的懂衩,比如開車的時候手和腳共同來駕駛汽車,再...
    TENG書閱讀 503評論 0 0
  • 一多任務(wù)的引入 有很多的場景中的事情是同時進(jìn)行的金踪,比如開車的時候手和腳共同來駕駛汽車浊洞,再比如唱歌跳舞也是同時進(jìn)行的...
    五行缺覺閱讀 657評論 0 0
  • 1.1.1多任務(wù)的引入 什么叫“多任務(wù)”呢?簡單地說胡岔,就是操作系統(tǒng)可以同時運(yùn)行多個任務(wù)法希。打個比方,你一邊在用瀏覽器...
    PythonMaO閱讀 472評論 0 1
  • 一靶瘸、進(jìn)程的概念 相信很多同學(xué)都聽說過windows苫亦、linux,MacOS都是多任務(wù)怨咪,多用戶的操作系統(tǒng)屋剑。那什么是多...
    轉(zhuǎn)身后的那一回眸閱讀 993評論 0 1
  • Num01-->進(jìn)程的創(chuàng)建-fork Python的os模塊封裝了常見的系統(tǒng)調(diào)用,其中就包括fork诗眨,可以在Pyt...
    曉可加油閱讀 804評論 0 0