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