當前位置:成語大全網 - 新華字典 - python中的進程-實戰部分

python中的進程-實戰部分

如果想了解進程 可以先看壹下這壹篇 python中的進程-理論部分

python中的多線程無法利用多核優勢,如果想要充分地使用多核CPU的資源(os.cpu_count()查看),在python中大部分情況需要使用多進程。Python提供了multiprocessing。

multiprocessing模塊用來開啟子進程,並在子進程中執行我們定制的任務(比如函數),該模塊與多線程模塊threading的編程接口類似。

multiprocessing模塊的功能眾多:支持子進程、通信和***享數據、執行不同形式的同步,提供了Process、Queue、Pipe、Lock等組件。

需要再次強調的壹點是:與線程不同,進程沒有任何***享狀態,進程修改的數據,改動僅限於該進程內。

創建進程的類

參數介紹:

group參數未使用,值始終為None

target表示調用對象,即子進程要執行的任務

args表示調用對象的位置參數元組,args=(1,2,'tiga',)

kwargs表示調用對象的字典,kwargs={'name':'tiga','age':18}

name為子進程的名稱

方法介紹:

p.start():啟動進程,並調用該子進程中的p.run()

p.run():進程啟動時運行的方法,正是它去調用target指定的函數,我們自定義類的類中壹定要實現該方法

p.terminate():強制終止進程p,不會進行任何清理操作,如果p創建了子進程,該子進程就成了僵屍進程,使用該方法需要特別小心這種情況。如果p還保存了壹個鎖那麽也將不會被釋放,進而導致死鎖

p.is_alive():如果p仍然運行,返回True

p.join([timeout]):主線程等待p終止(強調:是主線程處於等的狀態,而p是處於運行的狀態)。timeout是可選的超時時間,需要強調的是,p.join只能join住start開啟的進程,而不能join住run開啟的進程

屬性介紹:

註意:在windows中Process()必須放到# if __name__ == '__main__':下

創建並開啟子進程的兩種方式

方法壹:

方法二:

有了join,程序不就是串行了嗎?

terminate與is_alive

name與pid