python 系統(tǒng)編程

進(jìn)程的創(chuàng)建-fork

進(jìn)程VS程序

編寫完畢的代碼,在沒有運行的時候,稱之為程序

正在運行著的代碼霉赡,就成為進(jìn)程

進(jìn)程,除了包含代碼以外幔托,還有需要運行的環(huán)境等穴亏,所以和程序是有區(qū)別的

fork()

Python的os模塊封裝了常見的系統(tǒng)調(diào)用,其中就包括fork重挑,可以在Python程序中輕松創(chuàng)建子進(jìn)程:

說明:

·程序執(zhí)行到os.fork()時嗓化,操作系統(tǒng)會創(chuàng)建一個新的進(jìn)程(子進(jìn)程),然后復(fù)制父進(jìn)程的所有信息到子進(jìn)程中

·然后父進(jìn)程和子進(jìn)程都會從fork()函數(shù)中得到一個返回值谬哀,在子進(jìn)程中這個值一定是0刺覆,而父進(jìn)程中是子進(jìn)程的id號

在Unix/Linux操作系統(tǒng)中,提供了一個fork()系統(tǒng)函數(shù)史煎,它非常特殊谦屑。

普通的函數(shù)調(diào)用,調(diào)用一次篇梭,返回一次氢橙,但是fork()調(diào)用一次,返回兩次恬偷,因為操作系統(tǒng)自動把當(dāng)前進(jìn)程(稱為父進(jìn)程)復(fù)制了一份(稱為子進(jìn)程)悍手,然后,分別在父進(jìn)程和子進(jìn)程內(nèi)返回袍患。

子進(jìn)程永遠(yuǎn)返回0坦康,而父進(jìn)程返回子進(jìn)程的ID。

這樣做的理由是协怒,一個父進(jìn)程可以fork出很多子進(jìn)程涝焙,所以,父進(jìn)程要記下每個子進(jìn)程的ID孕暇,而子進(jìn)程只需要調(diào)用getppid()就可以拿到父進(jìn)程的ID仑撞。

getpid()、getppid()

多進(jìn)程修改全局變量

總結(jié):

·多進(jìn)程中妖滔,每個進(jìn)程中所有數(shù)據(jù)(包括全局變量)都各有擁有一份隧哮,互不影響


多次fork問題


multiprocessing

如果你打算編寫多進(jìn)程的服務(wù)程序,Unix/Linux無疑是正確的選擇座舍。由于Windows沒有fork調(diào)用沮翔,難道在Windows上無法用Python編寫多進(jìn)程的程序?

由于Python是跨平臺的曲秉,自然也應(yīng)該提供一個跨平臺的多進(jìn)程支持采蚀。multiprocessing模塊就是跨平臺版本的多進(jìn)程模塊疲牵。

multiprocessing模塊提供了一個Process類來代表一個進(jìn)程對象,下面的例子演示了啟動一個子進(jìn)程并等待其結(jié)束:

說明

·創(chuàng)建子進(jìn)程時榆鼠,只需要傳入一個執(zhí)行函數(shù)和函數(shù)的參數(shù)纲爸,創(chuàng)建一個Process實例,用start()方法啟動妆够,這樣創(chuàng)建進(jìn)程比fork()還要簡單识啦。

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


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

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

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

·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值串绩;


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缺虐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子礁凡,更是在濱河造成了極大的恐慌高氮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顷牌,死亡現(xiàn)場離奇詭異剪芍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窟蓝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門罪裹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事状共√赘” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵口芍,是天一觀的道長箍铲。 經(jīng)常有香客問我,道長鬓椭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任关划,我火速辦了婚禮小染,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贮折。我一直安慰自己裤翩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布调榄。 她就那樣靜靜地躺著踊赠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪每庆。 梳的紋絲不亂的頭發(fā)上筐带,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音缤灵,去河邊找鬼伦籍。 笑死,一個胖子當(dāng)著我的面吹牛腮出,可吹牛的內(nèi)容都是我干的帖鸦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胚嘲,長吁一口氣:“原來是場噩夢啊……” “哼作儿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起馋劈,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤攻锰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侣滩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體口注,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年君珠,在試婚紗的時候發(fā)現(xiàn)自己被綠了寝志。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖材部,靈堂內(nèi)的尸體忽然破棺而出毫缆,到底是詐尸還是另有隱情,我是刑警寧澤乐导,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布苦丁,位于F島的核電站,受9級特大地震影響物臂,放射性物質(zhì)發(fā)生泄漏旺拉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一棵磷、第九天 我趴在偏房一處隱蔽的房頂上張望蛾狗。 院中可真熱鬧,春花似錦仪媒、人聲如沸沉桌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽留凭。三九已至,卻和暖如春偎巢,著一層夾襖步出監(jiān)牢的瞬間蔼夜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工艘狭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挎扰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓巢音,卻偏偏與公主長得像遵倦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子官撼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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

  • 1.進(jìn)程 1.1多線程的引入 現(xiàn)實生活中 有很多的場景中的事情是同時進(jìn)行的梧躺,比如開車的時候手和腳共同來駕駛汽車,再...
    TENG書閱讀 500評論 0 0
  • 1.1.1多任務(wù)的引入 什么叫“多任務(wù)”呢傲绣?簡單地說掠哥,就是操作系統(tǒng)可以同時運行多個任務(wù)。打個比方秃诵,你一邊在用瀏覽器...
    PythonMaO閱讀 470評論 0 1
  • 1.進(jìn)程 1.多任務(wù)的引入 有很多的場景中的事情是同時進(jìn)行的续搀,比如開車的時候手和腳共同來駕駛汽車,再比如唱歌跳舞也...
    一只寫程序的猿閱讀 579評論 0 1
  • 進(jìn)程: 多任務(wù) 概念,操作系統(tǒng)同時運行多個任務(wù) fork(創(chuàng)建進(jìn)程) 導(dǎo)入os模塊 程序運行到os.fork時,系...
    界面大叔閱讀 241評論 0 0
  • 1.進(jìn)程 1.1進(jìn)程的創(chuàng)建-fork 1.1.1進(jìn)程 與 程序 編寫完畢的代碼菠净,在沒有運行的時候禁舷,稱之為程序 正在...
    MambaMentality閱讀 503評論 0 0