Mr.Li--python-系統(tǒng)編程-進程

進程:

多任務

概念,操作系統(tǒng)同時運行多個任務

fork(創(chuàng)建進程)

導入os模塊

程序運行到os.fork時,系統(tǒng)會創(chuàng)建一個子進程,然后把父進程復制一份到子進程,子進程的值一定是0,父進程返回子進程的id

getpid(),getppid()

getpid(),當前進程id,getppid父進程id

多次fork問題


父進程,子進程執(zhí)行順序沒有規(guī)律,完全取決于操作系統(tǒng)的系統(tǒng)調(diào)度算法

multiprocessing

跨版本多進程模塊

import Process (multiprocessing)

說明

創(chuàng)建子進程時蜒秤,只需要傳入一個執(zhí)行函數(shù)和函數(shù)的參數(shù)怎棱,創(chuàng)建一個Process實例,用start()方法啟動,這樣創(chuàng)建進程比fork()還要簡單。

·join()方法可以等待子進程結(jié)束后再繼續(xù)往下運行,通常用于進程間的同步。

·target:表示這個進程實例所調(diào)用對象;

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

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

·name:為當前進程實例的別名境蔼;

·group:大多數(shù)情況下用不到灶平;

Process類常用方法:

·is_alive():判斷進程實例是否還在執(zhí)行伺通;

·join([timeout]):是否等待進程實例執(zhí)行結(jié)束,或等待多少秒逢享;

·start():啟動進程實例(創(chuàng)建子進程)罐监;

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

·terminate():不管任務是否完成,立即終止侧但;

Process類常用屬性:

·name:當前進程實例別名矢空,默認為Process-N,N為從1開始遞增的整數(shù)禀横;

·pid:當前進程實例的PID值屁药;

進程的創(chuàng)建-Process子類:

創(chuàng)建新的進程還能夠使用類的方式,可以自定義一個類柏锄,繼承Process類酿箭,每次實例化這個類的時候,就等同于實例化一個進程對象



方法類和繼承類的對比:

繼承類是以面向?qū)ο髮ο髞砜紤]這個事的,所以業(yè)務邏輯復雜建議使用繼承類,更好理解.

進程池pool:

當需要創(chuàng)建的子進程數(shù)量不多時趾娃,可以直接利用multiprocessing中的Process動態(tài)成生多個進程缭嫡,但如果是上百甚至上千個目標,手動的去創(chuàng)建進程的工作量巨大抬闷,此時就可以用到multiprocessing模塊提供的Pool方法械巡。

初始化Pool時,可以指定一個最大進程數(shù)饶氏,當有新的請求提交到Pool中時,如果池還沒有滿有勾,那么就會創(chuàng)建一個新的進程用來執(zhí)行該請求疹启;但如果池中的進程數(shù)已經(jīng)達到指定的最大值,那么該請求就會等待蔼卡,直到池中有進程結(jié)束喊崖,才會創(chuàng)建新的進程來執(zhí)行


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

·apply_async(func[, args[, kwds]]):使用非阻塞方式調(diào)用func(并行執(zhí)行,堵塞方式必須等待上一個進程退出才能執(zhí)行下一個進程)雇逞,args為傳遞給func的參數(shù)列表荤懂,kwds為傳遞給func的關鍵字參數(shù)列表;

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

·close():關閉Pool塘砸,使其不再接受新的任務节仿;

·terminate():不管任務是否完成,立即終止掉蔬;

·join():主進程阻塞廊宪,等待子進程的退出矾瘾,必須在close或terminate之后使用;

進程間通信-Queue

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

-margi

·Queue.qsize():返回當前隊列包含的消息數(shù)量壕翩;

·Queue.empty():如果隊列為空,返回True傅寡,反之False放妈;

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

·Queue.get([block[, timeout]]):獲取隊列中的一條消息芜抒,然后將其從列隊中移除,block默認值為True淀零;

1)如果block使用默認值挽绩,且沒有設置timeout(單位秒),消息列隊如果為空驾中,此時程序?qū)⒈蛔枞ㄍT谧x取狀態(tài))唉堪,直到從消息列隊讀到消息為止,如果設置了timeout肩民,則會等待timeout秒唠亚,若還沒讀取到任何消息,則拋出"Queue.Empty"異常持痰;

2)如果block值為False灶搜,消息列隊如果為空,則會立刻拋出"Queue.Empty"異常工窍;

·Queue.get_nowait():相當Queue.get(False)割卖;

·Queue.put(item,[block[, timeout]]):將item消息寫入隊列,block默認值為True患雏;

1)如果block使用默認值鹏溯,且沒有設置timeout(單位秒),消息列隊如果已經(jīng)沒有空間可寫入淹仑,此時程序?qū)⒈蛔枞ㄍT趯懭霠顟B(tài))丙挽,直到從消息列隊騰出空間為止,如果設置了timeout匀借,則會等待timeout秒颜阐,若還沒空間,則拋出"Queue.Full"異常吓肋;

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

·Queue.put_nowait(item):相當Queue.put(item, False)猿棉;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磅叛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萨赁,更是在濱河造成了極大的恐慌弊琴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杖爽,死亡現(xiàn)場離奇詭異敲董,居然都是意外死亡,警方通過查閱死者的電腦和手機慰安,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門腋寨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人化焕,你說我怎么就攤上這事萄窜。” “怎么了撒桨?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵查刻,是天一觀的道長。 經(jīng)常有香客問我凤类,道長穗泵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任谜疤,我火速辦了婚禮佃延,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夷磕。我一直安慰自己履肃,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布坐桩。 她就那樣靜靜地躺著榆浓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撕攒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天烘浦,我揣著相機與錄音抖坪,去河邊找鬼。 笑死闷叉,一個胖子當著我的面吹牛擦俐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播握侧,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蚯瞧,長吁一口氣:“原來是場噩夢啊……” “哼嘿期!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起埋合,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤备徐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后甚颂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜猾,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年振诬,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹭睡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡赶么,死狀恐怖肩豁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辫呻,我是刑警寧澤清钥,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站印屁,受9級特大地震影響循捺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雄人,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一从橘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧础钠,春花似錦恰力、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至很钓,卻和暖如春香府,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背码倦。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工企孩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袁稽。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓勿璃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子补疑,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 1.進程 1.1多線程的引入 現(xiàn)實生活中 有很多的場景中的事情是同時進行的歧沪,比如開車的時候手和腳共同來駕駛汽車,再...
    TENG書閱讀 503評論 0 0
  • 1.進程 1.多任務的引入 有很多的場景中的事情是同時進行的莲组,比如開車的時候手和腳共同來駕駛汽車诊胞,再比如唱歌跳舞也...
    一只寫程序的猿閱讀 579評論 0 1
  • 1.1.1多任務的引入 什么叫“多任務”呢?簡單地說胁编,就是操作系統(tǒng)可以同時運行多個任務厢钧。打個比方,你一邊在用瀏覽器...
    PythonMaO閱讀 472評論 0 1
  • 要讓Python程序?qū)崿F(xiàn)多進程(multiprocessing)嬉橙,我們先了解操作系統(tǒng)的相關知識早直。Unix/Linu...
    壁花燒年閱讀 738評論 0 0
  • 一、進程的概念 相信很多同學都聽說過windows市框、linux霞扬,MacOS都是多任務,多用戶的操作系統(tǒng)枫振。那什么是多...
    轉(zhuǎn)身后的那一回眸閱讀 993評論 0 1