国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python并發之多進程的方法實例代碼

2020-02-15 22:45:43
字體:
來源:轉載
供稿:網友

一,進程的理論基礎

一個應用程序,歸根結底是一堆代碼,是靜態的,而進程才是執行中的程序,在一個程序運行的時候會有多個進程并發執行。

進程和線程的區別:

進程是系統資源分配的基本單位。 一個進程內可以包含多個線程,屬于一對多的關系,進程內的資源,被其內的線程共享 線程是進程運行的最小單位,如果說進程是完成一個功能,那么其線程就是完成這個功能的基本單位 進程間資源不共享,多進程切換資源開銷,難度大,同一進程內的線程資源共享,多線程切換資源開銷,難度小

進程與線程的共同點:

都是為了提高程序運行效率,都有執行的優先權

二,Python的多進程( multiprocessing模塊)

創建一個進程(和創建線程類似)

方法一:創建Process對象,通過對象調用start()方法啟動進程

from multiprocessing import Processdef foo(name): print('hello,%s'%name)if __name__ == '__main__': p1=Process(target=foo,args=('world',)) p2 = Process(target=foo, args=('China',)) p1.start() p2.start() print('=====主進程=====') # == == =主進程 == == = # hello, world # hello, China #主進程和子進程并發執行 

注意:Process對象只能在在 if __name__ == '__main__':下創建,不然會報錯。

方法二:自定義一個類繼承Process類,并重寫run()方法,將執行代碼放在其內

from multiprocessing import Processclass MyProcess(Process): def __init__(self,name):  super().__init__()  self.name = name def run(self):  print('hello,%s'%self.name)if __name__ == '__main__': myprocess1 = MyProcess('world') myprocess2 = MyProcess('world') myprocess1.start() myprocess2.start()

Process內置方法

實例方法:

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

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

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

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

p.join([timeout]):主線程等待p終止。timeout是可選的超時時間
Process屬性

p.daemon:默認值為False,如果設為True,代表p為后臺運行的守護進程,當p的父進程終止時,p也隨之終止,并且設定為True后,p不能創建自己的新進程,必須在p.start()之前設置

p.name:進程的名稱

p.pid:進程的pid

p.exitcode:進程在運行時為None、如果為–N,表示被信號N結束(了解即可)

守護進程

類似于守護線程,只不過守護線程是對象的一個方法,而守護進程封裝成對象的屬性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辛集市| 绥江县| 屯昌县| 巴里| 河池市| 临澧县| 禹城市| 福贡县| 抚松县| 通山县| 神池县| 吴江市| 璧山县| 两当县| 桂东县| 民勤县| 志丹县| 左贡县| 双柏县| 图片| 安西县| 大庆市| 拜城县| 勃利县| 广南县| 宿松县| 鹤庆县| 怀来县| 保靖县| 南宫市| 济宁市| 元氏县| 襄城县| 昭觉县| 游戏| 梓潼县| 长子县| 阳东县| 东山县| 武安市| 资兴市|