知識點2多進程編程_第1頁
知識點2多進程編程_第2頁
知識點2多進程編程_第3頁
知識點2多進程編程_第4頁
知識點2多進程編程_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

多進程編程多進程編程摘要python中的多線程無法利用多核優(yōu)勢(后面會講),如果想要充分地使用多核CPU的資源(>>>importos;os.cpu_count()查看CPU核數(shù)),在python中大部分情況需要使用多進程。Python提供了非常好用的多進程模塊multiprocessing。multiprocessing模塊用來開啟子進程,并在子進程中執(zhí)行我們定制的任務(wù)(比如函數(shù)),該模塊與多線程模塊threading的編程接口類似。multiprocessing模塊的功能眾多:支持子進程、通信和共享數(shù)據(jù)、執(zhí)行不同形式的同步,提供了Process、Queue、Pipe、Lock等組件。需要再次強調(diào)的一點是:與線程不同,進程沒有任何共享狀態(tài),進程修改的數(shù)據(jù),改動僅限于該進程內(nèi)。關(guān)鍵詞多進程1·創(chuàng)建進程的類Process([group[,target[,name[,args[,kwargs]]]]]),由該類實例化得到的對象,表示一個子進程中的任務(wù)(尚未啟動)注:1.需要使用關(guān)鍵字的方式來指定參數(shù)2.args指定的為傳給target函數(shù)的位置參數(shù),是一個元組形式,必須有逗號1.Process類的介紹2參數(shù)介紹:group參數(shù)未使用,值始終為Nonetarget表示調(diào)用對象,即子進程要執(zhí)行的任務(wù)args表示調(diào)用對象的位置參數(shù)元組kwargs表示調(diào)用對象的字典name為子進程的名稱1.Process類的介紹341.Process類的介紹

方法介紹p是Process類的一個實例p.start():啟動進程,并調(diào)用該子進程中的p.run()p.run():進程啟動時運行的方法,正是它去調(diào)用target指定的函數(shù),我們自定義類的類中一定要實現(xiàn)該方法p.terminate():強制終止進程p,不會進行任何清理操作,如果p創(chuàng)建了子進程,該子進程就成了僵尸進程,使用該方法需要特別小心這種情況。如果p還保存了一個鎖那么也將不會被釋放,進而導(dǎo)致死鎖p.is_alive():如果p仍然運行,返回Truep.join([timeout]):主線程等待p終止(強調(diào):是主線程處于等的狀態(tài),而p是處于運行的狀態(tài))。timeout是可選的超時時間,需要強調(diào)的是,p.join只能join住start開啟的進程,而不能join住run開啟的進程5

屬性介紹p.daemon:默認值為False,如果設(shè)為True,代表p為后臺運行的守護進程,當(dāng)p的父進程終止時,p也隨之終止,并且設(shè)定為True后,p不能創(chuàng)建自己的新進程,必須在p.start()之前設(shè)置:進程的名稱p.pid:進程的pid

p.exitcode:進程在運行時為None、如果為–N,表示被信號N結(jié)束(了解即可)p.authkey:進程的身份驗證鍵,默認是由os.urandom()隨機生成的32字符的字符串。這個鍵的用途是為涉及網(wǎng)絡(luò)連接的底層進程間通信提供安全性,這類連接只有在具有相同的身份驗證鍵時才能成功(了解即可)6Process類的使用創(chuàng)建并開啟子進程的兩種方式:方法1:7輸出結(jié)果注:if__name__=='__main__'的意思是:當(dāng).py文件被直接運行時,if__name__=='__main__'之下的代碼塊將被運行;當(dāng).py文件以模塊形式被導(dǎo)入時,if__name__=='__main__'之下的代碼塊不被運行。8方法2輸出結(jié)果9上述兩個方法都各自創(chuàng)建了4個進程并在暫停了一段時間后分別結(jié)束4個進程。10Process對象的其他方法或?qū)傩赃M程對象的其他方法一:terminate,is_alive輸出結(jié)果:進程對象的其他方法二:p.daemon=True,p.join輸出結(jié)果:113.進程同步(鎖)進程之間數(shù)據(jù)不共享,但是共享同一套文件系統(tǒng),所以訪問同一個文件,或同一個打印終端,是沒有問題的。共享同一打印終端,發(fā)現(xiàn)會有多行內(nèi)容打印到一行的現(xiàn)象,加鎖的目的是為了保證多個進程修改同一塊數(shù)據(jù)時,同一時間只能有一個修改,即串行的修改,沒錯,速度是慢了,犧牲了速度而保證了數(shù)據(jù)安全。12示例:不加進程鎖在上面的代碼中,定義了一個共享變量v,兩個進程都可以對它進行操作。在job()中讓v每隔0.1秒輸出一次累加num的結(jié)果,但是在兩個進程p1和p2中設(shè)定了不同的累加值。所以接下來看下這兩個進程是否會出現(xiàn)沖突。13輸出結(jié)果:可以看到,進程1和進程2在相互搶著使用共享內(nèi)存v。14加進程鎖首先定義一個進程鎖:l=mp.Lock()#定義一個進程鎖然后將進程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論