摘要:類常用屬性布爾值,指示進程是否是后臺進程。當創建它的進程終止時,后臺進程會自動終止。進程的整數退出指令。如果進程仍然在運行,它的值為,如果值為負數,就表示進程由信號所終止。
上一篇文章:Python進程專題1:fork():創建子進程、getpid()、getppid()
下一篇文章:Python進程專題3:繼承Process來創建進程
由于fork()無法對Windows使用,而python是跨平臺的,顯然需要一個新的跨平臺替代品來代替它,那就是multiprocessing模塊。
multiprocessing模塊中使用Process類來代表進程。
語法:Process([group,target,name,args,kwargs]) group:至今還未使用,值始終為None target:進程實例所調用的對象,一般表示子進程要調用的函數。 args:表示調用對象的參數,一般是函數的參數 kwargs:表示調用對象的關鍵字參數字典。 name:當前進程實例的別名
Process類常用方法:
p.is_alive():判斷進程是否還在運行。如果還在運行,返回true,否則返回false p.join([timeout]):等待進程實例執行完畢,或等待多少秒 p.run():默認會調用target指定的對象,如果沒有給定target參數,對該進程對象調用start()方法時,就會執行對象中的run()方法 p.start():啟動進程實例(創建子進程),病運行子進城的run方法 p.terminate():不管任務是否完成,立即終止,同時不會進行任何的清理工作,如果進程p創建了它自己的子進程,這些進程就會 變成僵尸進程,使用時特別注意,如果p保存了一個鎖或者參與了進程間通信,那么使用該方法終止它可能會導致死鎖或者I/O損壞。
Process類常用屬性:
p.daemon:布爾值,指示進程是否是后臺進程。當創建它的進程終止時,后臺進程會自動終止。并且,后臺進程無法創建自己的新進城。 注意:p.daemon的值必須在p.start方法調用前設置。 p.exitcode:進程的整數退出指令。如果進程仍然在運行,它的值為None,如果值為負數:—N,就表示進程由信號N所終止。 p.name:當前進程實例別名,默認為Process-N,N為從1開始遞增的整數。 p.pid:當前進程實例的PID
實例1:理解多帶帶創建進程的相關函數
#該實例是用來理解多帶帶創建進程的實例 from multiprocessing import Process import os,time #將要在子進程中運行的方法 def test(name,interval): for i in range(interval): print("子進程運行中,name=%s,pid=%d,父進程:%d"%(name,os.getpid(),os.getppid())) time.sleep(interval) if __name__=="__main__": print("父進程%d"%os.getpid()) #創建進程實例,第一個參數傳要在子線程執行的函數,第二個參數傳函數需要的參數 p=Process(target=test,args=("mark",2)) print("子進程要執行了") #啟動進程 p.start() p.join()#等待子進程運行結束再繼續執行下面語句 print("子進程結束了")
結果:
父進程17756 子進程要執行了 子進程運行中,name=mark,pid=17758,父進程:17756 子進程運行中,name=mark,pid=17758,父進程:17756 子進程結束了
實例2:兩個進程同時運行
from multiprocessing import Process import os import time def test1(interval): print("test1子進程運行中,pid=%d,父進程:%d"%(os.getpid(),os.getppid())) t_start=time.time() time.sleep(interval) t_end=time.time() print("test1執行時間:%0.2f秒"%(t_end-t_start)) def test2(interval): print("test2子進程運行中,pid=%d,父進程:%d"%(os.getpid(),os.getppid())) t_start=time.time() time.sleep(interval) t_end=time.time() print("test2執行時間:%0.2f秒"%(t_end-t_start)) if __name__=="__main__": print("父進程%d"%os.getpid()) #創建進程實例,第一個參數傳要在子線程執行的函數,第二個參數傳函數需要的參數 p1=Process(target=test1,args=(1,)) p2=Process(target=test2,name="mark1",args=(2,)) #啟動進程 p1.start() p2.start() print("p2是否在運行:",p2.is_alive()) p2.join()#等待子進程運行結束再繼續執行下面語句 print("p2是否在運行:", p2.is_alive())
結果:
父進程15080 p2是否在運行: True test1子進程運行中,pid=15081,父進程:15080 test2子進程運行中,pid=15082,父進程:15080 test1執行時間:1.00秒 test2執行時間:2.00秒 p2是否在運行: False
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42359.html
摘要:可以使用標準的索引切片迭代操作訪問它,其中每項操作均鎖進程同步,對于字節字符串,還具有屬性,可以把整個數組當做一個字符串進行訪問。當所編寫的程序必須一次性操作大量的數組項時,如果同時使用這種數據類型和用于同步的單獨大的鎖,性能將極大提升。 上一篇文章:Python進程專題5:進程間通信下一篇文章:Python進程專題7:托管對象 我們現在知道,進程之間彼此是孤立的,唯一通信的方式是隊...
摘要:連接帶遠程管理器對象,該對象的地址在構造函數中支出。在當前進程中運行管理器服務器。啟動一個單的子進程,并在該子進程中啟動管理器服務器。如果無法序列號對象將引發異常。 上一篇文章:Python進程專題6:共享數據與同步下一篇文章:Python進程專題8:分布集群的消息傳遞 進程不支持共享對象,上面描述的創建共享值和數組,但都是指定的特殊類型,對高級的Python對象(如:字典、列表、用...
摘要:上一篇文章進程專題繼承來創建進程下一篇文章進程專題進程間通信當我們需要創建大量的進程時,利用模塊提供的來創建進程。關閉進程池,不再接受進的進程請求,但已經接受的進程還是會繼續執行。 上一篇文章:Python進程專題3:繼承Process來創建進程下一篇文章:Python進程專題5:進程間通信 當我們需要創建大量的進程時,利用multiprocessing模塊提供的Pool來創建進程。 ...
摘要:上一篇文章進程專題進程池下一篇文章進程專題共享數據與同步模塊支持的進程間通信主要有兩種管道和隊列。隊列底層使用管道和鎖,同時運行支持線程講隊列中的數據傳輸到底層管道中,來實習進程間通信。 上一篇文章:Python進程專題4:進程池Pool下一篇文章:Python進程專題6:共享數據與同步 multiprocessing模塊支持的進程間通信主要有兩種:管道和隊列。一般來說,發送較少的大...
摘要:上一篇文章進程專題創建進程下一篇文章進程專題進程池實例重新方法下面一句是調用父類方法,這一本盡量不要少,因為父類還有很多事情需要在方法內處理重寫方法子進程運行中,,父進程子進程運行結束,耗時秒父進程開始執行父進程運行結束,耗時秒結果父進 上一篇文章:Python進程專題2:multiprocessing創建進程下一篇文章:Python進程專題4:進程池Pool 實例: from mu...
閱讀 2459·2021-11-22 09:34
閱讀 3066·2021-10-25 09:43
閱讀 1981·2021-10-11 10:59
閱讀 3381·2021-09-22 15:13
閱讀 2330·2021-09-04 16:40
閱讀 423·2019-08-30 15:53
閱讀 3189·2019-08-30 11:13
閱讀 2607·2019-08-29 17:30