進程Process是對各種資源管理的集合,包含對各種資源的調用、內存的管理、網絡接口的調用;一個進程Process可以包含多個子進程,啟動一個進程的時候會自動創建一個線程,進程里的第一個線程就是主線程(即python__name__==‘__main__');
進程Process模塊
對于線程操作可以用threading模塊,那么對于進程的創建python同樣也提供了Process模塊,創建進程時需要導入該模塊,語法如下:
#導入進程模塊
frommultiprocessingimportProcess
#創建進程
p=Process(group=None,target=None,name=None,args=(),kwargs={})
參數介紹:
group—參數未使用,默認值為None;
target—表示調用對象,即子進程要執行的任務(函數名字);
args—子進程對應函數的參數,并且類型是元組tuple;
kwargs—子進程對應函數的參數,并且類型是字典dict,如kwargs={‘name':Jack,‘age':18};
name—子進程名稱;
返回值:返回進程實例對象;
三.進程Process函數介紹
其實進程Process的函數和線程threading類似,具體如下:
1.start()—啟動進程;
2.terminate()—強制終止進程,不會進行任何清理操作。如果該進程終止前,創建了子進程,那么該子進程在其強制結束后變為僵尸進程;如果該進程還保存了一個鎖那么也將不會被釋放,進而導致死鎖,使用時,要注意;
3.is_alive()—判斷某進程是否存活,存活返回True,否則False;
4.join([timeout])—主線程等待子線程終止。timeout為可選擇超時時間;需要強調的是,p.join只能join住start開啟的進程,而不能join住run開啟的進程;
5.daemon—默認值為False,如果設置為True,代表該進程為后臺守護進程;當該進程的父進程終止時,該進程也隨之終止;并且設置為True后,該進程不能創建子進程,設置該屬性必須在start()之前;
6.name—進程名稱;
7.pid—進程ID標識,pid,值得注意的是:如果在start函數之前獲取pid默認為None,因為進程還未創建,獲取不到pid;
8.exitcode—進程運行時為None,如果為-N,表示被信號N結束了;
9.authkey—進程身份驗證,默認是由os.urandom()隨機生成32字符的字符串。這個鍵的用途是設計涉及網絡連接的底層進程間的通信提供安全性,這類連接只有在具有相同身份驗證才能成功;