日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

通過實例解析python創建進程常用方法

瀏覽:110日期:2022-07-20 13:53:23

 運行程序時,單線程或單進程往往是比較慢的,為加快程序運行速度,我們可以使用多進程,可以理解為多任務同時運行,小編的電腦是四核,所以可以設置四個進程。

下面,我們來了解下多進程的使用:

1、使用multiprocessing模塊創建進程

multiprocessing模塊提供了一個Process類來代表進程對象,語法如下:

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

其中,group:參數未使用,值始終是None

target:表示當前進程啟動時執行的可調用對象

name:為當前進程實例的別名

args:表示傳遞給target函數的參數元組

kwargs:表示傳遞給target函數的參數字典

使用多進程的一個簡單例子:

from multiprocessing import Process # 導入模塊# 執行子進程代碼def test(interval): print(’我是子進程’)# 執行主程序def main(): print(’主進程開始’) # 實例化Procss進程類 p = Process(target=test,args=(1,)) # 啟動子進程 p.start() print(’主進程結束’)if __name__ == ’__main__’: main()

結果:

主進程開始主進程結束我是子進程

Process的實例p常用的方法除start()外,還有如下常用方法:

is_alive():判斷進程實例是否還在執行

join([timeout]):是否等待進程實例執行結束,或等待多少秒

start():啟動進程實例(創建子進程)

run():如果沒有給定target參數,對這個對象調用start()方法時,就將執行對象中的run()方法

terminate():不管任務是否完成,立即終止

Process類還有如下常用屬性:

name:當前進程實例別名,默認為Process-N,N為從1開始遞增的整數

pid:當前進程實例的PID值

下面是Process類方法和屬性的使用,創建兩個子進程,分別使用os模塊和time模塊輸出父進程和子進程的id以及子進程的時間,并調用Process類的name和pid屬性:

# -*- coding:utf-8 -*-from multiprocessing import Processimport timeimport os#兩個子進程將會調用的兩個方法def child_1(interval): print('子進程(%s)開始執行,父進程為(%s)' % (os.getpid(), os.getppid())) # 計時開始 t_start = time.time() # 程序將會被掛起interval秒 time.sleep(interval) # 計時結束 t_end = time.time() print('子進程(%s)執行時間為’%0.2f’秒'%(os.getpid(),t_end - t_start))def child_2(interval): print('子進程(%s)開始執行,父進程為(%s)' % (os.getpid(), os.getppid())) # 計時開始 t_start = time.time() # 程序將會被掛起interval秒 time.sleep(interval) # 計時結束 t_end = time.time() print('子進程(%s)執行時間為’%0.2f’秒'%(os.getpid(),t_end - t_start))if __name__ == ’__main__’: print('------父進程開始執行-------') # 輸出當前程序的ID print('父進程PID:%s' % os.getpid()) # 實例化進程p1 p1=Process(target=child_1,args=(1,)) # 實例化進程p2 p2=Process(target=child_2,name='mrsoft',args=(2,)) # 啟動進程p1 p1.start() # 啟動進程p2 p2.start() #同時父進程仍然往下執行,如果p2進程還在執行,將會返回True print('p1.is_alive=%s'%p1.is_alive()) print('p2.is_alive=%s'%p2.is_alive()) #輸出p1和p2進程的別名和PID print('p1.name=%s'%p1.name) print('p1.pid=%s'%p1.pid) print('p2.name=%s'%p2.name) print('p2.pid=%s'%p2.pid) print('------等待子進程-------') # 等待p1進程結束 p1.join() # 等待p2進程結束 p2.join() print('------父進程執行結束-------')

結果:

------父進程開始執行-------父進程PID:13808p1.is_alive=Truep2.is_alive=Truep1.name=Process-1p1.pid=13360p2.name=mrsoftp2.pid=21500------等待子進程-------子進程(13360)開始執行,父進程為(13808)子進程(21500)開始執行,父進程為(13808)子進程(13360)執行時間為’1.01’秒子進程(21500)執行時間為’2.00’秒------父進程執行結束-------

上述代碼中,第一次實例化Process類時,會為name屬性默認賦值為Process-1,第二次則默認為Process-2,但由于實例化進程p2時,設置了name屬性為mrsoft,所以p2.name的值為mrsoft。

2、使用Process子類創建進程

對于一些簡單的小任務,通常使用Process(target=test)方式實現多進程。但如果要處理復雜任務的進程,通常定義一個類,使其繼承Process類,下面是通過使用Process子類創建多個進程。

# -*- coding:utf-8 -*-from multiprocessing import Processimport timeimport os#繼承Process類class SubProcess(Process): # 由于Process類本身也有__init__初識化方法,這個子類相當于重寫了父類的這個方法 def __init__(self,interval,name=’’): # 調用Process父類的初始化方法 Process.__init__(self) # 接收參數interval self.interval = interval # 判斷傳遞的參數name是否存在 if name: # 如果傳遞參數name,則為子進程創建name屬性,否則使用默認屬性 self.name = name #重寫了Process類的run()方法 def run(self): print('子進程(%s) 開始執行,父進程為(%s)'%(os.getpid(),os.getppid())) t_start = time.time() time.sleep(self.interval) t_stop = time.time() print('子進程(%s)執行結束,耗時%0.2f秒'%(os.getpid(),t_stop-t_start))if __name__=='__main__': print('------父進程開始執行-------') # 輸出當前程序的ID print('父進程PID:%s' % os.getpid()) p1 = SubProcess(interval=1,name=’mrsoft’) p2 = SubProcess(interval=2) #對一個不包含target屬性的Process類執行start()方法,就會運行這個類中的run()方法, #所以這里會執行p1.run() # 啟動進程p1 p1.start() # 啟動進程p2 p2.start() # 輸出p1和p2進程的執行狀態,如果真正進行,返回True,否則返回False print('p1.is_alive=%s'%p1.is_alive()) print('p2.is_alive=%s'%p2.is_alive()) #輸出p1和p2進程的別名和PID print('p1.name=%s'%p1.name) print('p1.pid=%s'%p1.pid) print('p2.name=%s'%p2.name) print('p2.pid=%s'%p2.pid) print('------等待子進程-------') # 等待p1進程結束 p1.join() # 等待p2進程結束 p2.join() print('------父進程執行結束-------')

結果:

------父進程開始執行-------父進程PID:2512p1.is_alive=Truep2.is_alive=Truep1.name=mrsoftp1.pid=20328p2.name=SubProcess-2p2.pid=13700------等待子進程-------子進程(20328) 開始執行,父進程為(2512)子進程(13700) 開始執行,父進程為(2512)子進程(20328)執行結束,耗時1.00秒子進程(13700)執行結束,耗時2.00秒------父進程執行結束-------

上述代碼中,定義了一個SubProcess子類,繼承multiprocess.Process父類。SubProcess子類中定義了兩個方法:__init__()初始化方法和run()方法,在__init__()初始化方法中,調用父類multiprocess.Process的__init__()初始化方法,否則父類的__init__()方法會被覆蓋,無法開啟進程。此外,在SubProcess子類中沒有定義start()方法,但在主程序中卻調用了start()方法,此時就會自動執行SubProcess類的run()方法。

3、使用進程池Pool創建進程

上面我們使用Process類創建了兩個進程,但如果要創建十幾個或者上百個進程,則需要實例化更多的Process類,解決這一問題的方法就是使用multiprocessing模塊提供的pool類,即Pool進程池。

我們先來了解下Pool類的常用方法:

apply_async(func[,args[,kwds]]):使用非阻塞方式調用func()函數(并行執行,阻塞方式必須等待上一個進程退出才能執行下一個進程),args為傳遞給func()函數的參數列表, kwds為傳遞給func()函數的關鍵字參數列表

apply(func[,args[,kwds]]):使用阻塞方式調用func()函數

close():關閉Pool,使其不再接受新的任務

terminate():不管任務是否完成,立即終止

join():主進程阻塞,等待子進程的退出,必須在close或terminate之后使用

下面通過一個示例演示一下如何通過進程池創建多進程,設置最大進程數為3,使用非阻塞方式執行10個任務:

# -*- coding=utf-8 -*-from multiprocessing import Poolimport os, timedef task(name): print(’子進程(%s)執行task %s ...’ % ( os.getpid() ,name)) # 休眠1秒 time.sleep(1) if __name__==’__main__’: print(’父進程(%s).’ % os.getpid()) # 定義一個進程池,最大進程數3 p = Pool(3) # 從0開始循環10次 for i in range(10): # 使用非阻塞方式調用task()函數 p.apply_async(task, args=(i,)) print(’等待所有子進程結束...’) # 關閉進程池,關閉后p不再接收新的請求 p.close() # 等待子進程結束 p.join() print(’所有子進程結束.’)

結果:

父進程(3856).等待所有子進程結束...子進程(18872)執行task 0 ...子進程(11220)執行task 1 ...子進程(10140)執行task 2 ...子進程(18872)執行task 3 ...子進程(11220)執行task 4 ...子進程(10140)執行task 5 ...子進程(18872)執行task 6 ...子進程(11220)執行task 7 ...子進程(10140)執行task 8 ...子進程(18872)執行task 9 ...所有子進程結束.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一在线观看| 少妇久久久久| 亚洲永久av| 日韩欧美美女在线观看| 欧美日韩国产v| 久久久久黄色| 视频一区欧美日韩| 99国产精品| 在线精品亚洲欧美日韩国产| 国产精品免费大片| 狠狠爱成人网| 蜜桃精品在线| 亚洲深夜视频| 国产一区国产二区国产三区| 久久xxx视频| 蜜桃av.网站在线观看| 国产九一精品| 欧美日韩一区自拍| 亚洲精品麻豆| 石原莉奈在线亚洲二区| 午夜在线观看免费一区| 国产精品色网| 精品久久久网| 中文字幕av亚洲精品一部二部 | 欧美伊人久久| 香蕉久久一区| 欧美日一区二区三区在线观看国产免 | 91精品久久久久久久久久不卡| 色乱码一区二区三区网站| 石原莉奈一区二区三区在线观看| 一区在线免费观看| 喷白浆一区二区| 视频一区日韩精品| 国产一精品一av一免费爽爽| 国产亚洲精品精品国产亚洲综合| 日韩欧美激情电影| 日韩视频一二区| 日本h片久久| 国产日韩欧美一区二区三区| 国产极品模特精品一二| 日韩国产一二三区| 久久精品99久久久| 国产欧美自拍一区| 国产高清精品二区| 岛国av在线网站| 免费国产自久久久久三四区久久 | 久久国产精品久久久久久电车| 免费日本视频一区| 日韩二区三区四区| 久久这里只有| 成人亚洲一区| 欧美午夜精彩| 欧美日韩在线观看视频小说| 99国产精品| 日本aⅴ亚洲精品中文乱码 | 亚洲精品三级| 久久不卡日韩美女| 鲁鲁在线中文| 红桃视频欧美| 91精品国产自产观看在线| 国产精品九九| 欧美aa在线观看| 免费高清在线一区| 国产精品美女午夜爽爽| 国产精品国产三级国产在线观看| 欧美羞羞视频| 亚洲精一区二区三区| 久久久久九九精品影院| 91精品婷婷色在线观看| 婷婷视频一区二区三区| 国产精品观看| 激情久久中文字幕| 91亚洲无吗| 欧美精品高清| 亚洲精品乱码久久久久久蜜桃麻豆| 国产日韩欧美三级| 色天使综合视频| 亚洲精品观看| 欧美freesex黑人又粗又大| 免费日韩av| 欧美韩一区二区| 日日摸夜夜添夜夜添国产精品| 神马日本精品| 久久97视频| 国产欧美日韩在线观看视频| 日韩制服丝袜先锋影音| 亚洲韩日在线| 日本不卡免费高清视频在线| 国产精品主播在线观看| 免播放器亚洲一区| 一区久久精品| 亚洲性色视频| 国产麻豆久久| 成人在线免费观看91| 91精品美女| 亚洲精品自拍| 久久高清国产| 国产美女精品| 婷婷六月综合| 亚洲天堂免费电影| 国产高清不卡| 亚洲精品福利电影| 国产91在线精品| 国产精品亚洲欧美一级在线| 日本aⅴ免费视频一区二区三区| 亚洲欧美激情诱惑| 欧美/亚洲一区| 亚洲一级高清| 91九色精品| 五月天激情综合网| 丝袜av一区| 欧美精品一区二区久久| 99精品视频在线观看免费播放| 国产精品国产一区| 国产+成+人+亚洲欧洲在线| 久久99国产精品视频| 精品一区电影| 国产在线看片免费视频在线观看| 国产精品久久久久蜜臀| 91中文字幕精品永久在线| 日韩av自拍| 欧美一区久久久| 久久精品亚洲人成影院| 欧美国产91| 好看不卡的中文字幕| 一本色道久久精品| 亚洲国产不卡| 久久亚洲一区| 亚洲午夜久久| 欧美日韩a区| 国产激情一区| 久久男人av资源站| 不卡中文字幕| 亚洲日本国产| 国产精品2区| 久久精品国产久精国产| 久久精品国产网站| 在线手机中文字幕| 久久中文字幕av一区二区不卡| 99精品综合| 91久久中文| 日韩三级精品| 国产高清精品二区| 日韩大片在线播放| 精品一区在线| 日韩在线观看一区二区| 欧美在线91| 精品一级视频| 久久精品亚洲欧美日韩精品中文字幕| 亚洲黄页一区| 欧美视频久久| 色综合五月天| 国内精品福利| 亚洲人www| 欧美在线首页| 久久久久黄色| 欧美日韩一区二区三区视频播放| 丝袜亚洲精品中文字幕一区| 在线日韩成人| 久久不卡日韩美女| 国产精品久久久久久久久久10秀| 久久久久国产精品一区二区| 伊人久久亚洲美女图片| 欧美欧美黄在线二区| 四虎成人av| 亚洲欧洲日本mm| 日韩国产欧美在线播放| 激情黄产视频在线免费观看| 免播放器亚洲| 精品国产欧美日韩| 午夜视频精品| 91成人小视频| 精精国产xxxx视频在线野外| 蜜桃视频在线观看一区二区| 欧美精品第一区| 欧美日韩国产高清| 国产亚洲精品美女久久久久久久久久| 日韩久久电影| 日本亚洲最大的色成网站www| 欧美男人天堂| 日韩国产在线一| 久久久久久黄| 国产伦精品一区二区三区千人斩| 日韩精品免费一区二区在线观看| 一本综合精品| 成人午夜毛片| 蜜臀精品久久久久久蜜臀| 国产va免费精品观看精品视频| 蜜臀av国产精品久久久久 | 亚洲天堂成人| 久久精品国产在热久久| 石原莉奈在线亚洲三区| 国产欧洲在线| 欧美亚洲综合视频| 亚洲精品小说| 老牛影视精品| 国产精品伊人| 亚洲专区视频| av在线日韩| 麻豆免费精品视频|