python自帶庫--multiprocessing庫
multiprocessing模組介紹
python中的多執行緒無法利用多核優勢,如果想要充分地使用多核CPU的資源(os.cpu\_count\(\)檢視),在python中大部分情況需要使用多程序。
Python提供了multiprocessing。 multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。
multiprocessing模組的功能眾多:支援子程序、通訊和共享資料、執行不同形式的同步,>提供了Process、Queue、Pipe、Lock等元件。
需要再次強調的一點是:與執行緒不同,程序沒有任何共享狀態,程序修改的資料,改動僅限於該程序內。
二 Process類的介紹
建立程序的類:
Process([group [, target [, name [, args [, kwargs]]]]]),由該類例項化得到的物件,可用來開啟一個子程序
強調:
1. 需要使用關鍵字的方式來指定引數
2. args指定的為傳給target函式的位置引數,是一個元組形式,必須有逗號
引數介紹:
group引數未使用,值始終為None
target表示呼叫物件,即子程序要執行的任務
args表示呼叫物件的位置引數元組,args=(1,2,'mike',)
kwargs表示呼叫物件的字典,kwargs={'name':'mike','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.daemon
:預設值為False,如果設為True,代表p為後臺執行的守護程序,當p的父程序終止時,p也隨之終止,並且設定為True後,p不能建立自己的新程序,必須在p.start()之前設定
p.name
:程序的名稱
p.pid
:程序的pid