python中的多線程沒法利用多核優點,若是想要充分地使用多核CPU的資源(os.cpu\_count\(\)查看),在python中大部分狀況須要使用多進程。Python提供了multiprocessing。python
multiprocessing模塊用來開啓子進程,並在子進程中執行咱們定製的任務(好比函數),該模塊與多線程模塊threading的編程接口相似。multiprocessing模塊的功能衆多:支持子進程、編程
通訊和共享數據、執行不一樣形式的同步,>提供了Process、Queue、Pipe、Lock等組件。windows
須要再次強調的一點是:與線程不一樣,進程沒有任何共享狀態,進程修改的數據,改動僅限於該進程內。多線程
建立進程的類:併發
Process([group [, target [, name [, args [, kwargs]]]]]),由該類實例化獲得的對象,可用來開啓一個子進程 強調: 1. 須要使用關鍵字的方式來指定參數 2. args指定的爲傳給target函數的位置參數,是一個元組形式,必須有逗號
參數介紹:ide
group參數未使用,值始終爲None target表示調用對象,即子進程要執行的任務 args表示調用對象的位置參數元組,args=(1,2,'egon',) kwargs表示調用對象的字典,kwargs={'name':'egon','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是可選的超時時間。
注意:在windows中Process()必須放到# if __name__ == '__main__':下spa
開一個進程和主進程是併發的關係,我start一下就是先告訴操做系統我要開一個進程,然而它不會等待,他會去執行下面的代碼.操作系統
strat():方法的功能線程
1.開啓進程
2.執行功能
from multiprocessing import Process import time def talk(name): print("%s is taking"%name) time.sleep(3) print("%s is talk over" %name) if __name__=='__main__': p1=Process(target=talk,args=("jack",)) p2=Process(target=talk,args=("lucy",)) #p3=Process(target=talk,args=("lilei",)) p3=Process(target=talk,kwargs={"name":"lilei"}) # kwargs傳參方式 p1.start() p2.start() p3.start() print("主進程")
class Myprocess(Process): def __init__(self,name): super().__init__() self.name = name def run(self): # 此處的函數名必須爲run print("%s is talking" %self.name) time.sleep(3) print("%s is talk over" %self.name) if __name__ == '__main__': p1 = Myprocess("jack") p2=Myprocess("lucy") p3=Myprocess("lilei") p1.start() p2.start() p3.start() print("主進程...")