Python程序設(shè)計(jì)教程 課件 第13章-進(jìn)程與線程_第1頁
Python程序設(shè)計(jì)教程 課件 第13章-進(jìn)程與線程_第2頁
Python程序設(shè)計(jì)教程 課件 第13章-進(jìn)程與線程_第3頁
Python程序設(shè)計(jì)教程 課件 第13章-進(jìn)程與線程_第4頁
Python程序設(shè)計(jì)教程 課件 第13章-進(jìn)程與線程_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第13章-進(jìn)程與線程馬馳率風(fēng),羊致清和本章目標(biāo)了解什么是程序與進(jìn)程掌握創(chuàng)建進(jìn)程的方式掌握進(jìn)程之間的通信了解進(jìn)程與線程的概述掌握創(chuàng)建線程的方式掌握線程之間的通信方式掌握生產(chǎn)者與消費(fèi)者模式馬馳率風(fēng),羊致清和初識程序與進(jìn)程程序英文單詞為Program,是指一系列有序指令的集合,使用編程語言所編寫,用于實(shí)現(xiàn)一定的功能馬馳率風(fēng),羊致清和初識程序與進(jìn)程進(jìn)程進(jìn)程則是指啟動后的程序,系統(tǒng)會為進(jìn)程分配內(nèi)存空間馬馳率風(fēng),羊致清和創(chuàng)建進(jìn)程的方式第一種創(chuàng)建進(jìn)程的語法構(gòu):

Process(group=None,target,name,args,kwargs)參數(shù)說明:group:表示分組,實(shí)際上不使用,值默認(rèn)為None即可target:表示子進(jìn)程要執(zhí)行的任務(wù),支持函數(shù)名name:表示子進(jìn)程的名稱args:表示調(diào)用函數(shù)的位置參數(shù),以元組的形式進(jìn)行傳遞kwargs:表示調(diào)用函數(shù)的關(guān)鍵字參數(shù),以字典的形式進(jìn)行傳遞馬馳率風(fēng),羊致清和創(chuàng)建進(jìn)程的方式方法/屬性名稱功能描述name當(dāng)前進(jìn)程實(shí)例別名,默認(rèn)為Process-Npid當(dāng)前進(jìn)程對象的PID值is_alive()進(jìn)程是否執(zhí)行完,沒執(zhí)行完結(jié)果為True,否則為Falsejoin(timeout)等待結(jié)束或等待timeout秒start()啟動進(jìn)程run()如果沒有指定target參數(shù),則啟動進(jìn)程后,會調(diào)用父類中的run方法terminate()強(qiáng)制終止進(jìn)程馬馳率風(fēng),羊致清和創(chuàng)建進(jìn)程的方式第二種創(chuàng)建進(jìn)程的語法構(gòu):

class子進(jìn)程(Process):pass馬馳率風(fēng),羊致清和Pool進(jìn)程池進(jìn)程池的原理是:創(chuàng)建一個進(jìn)程池,并設(shè)置進(jìn)程池中最大的進(jìn)程數(shù)量。假設(shè)進(jìn)程池中最大的進(jìn)程數(shù)為3,現(xiàn)在有10個任務(wù)需要執(zhí)行,那么進(jìn)程池一次可以執(zhí)行3個任務(wù),4次即可完成全部任務(wù)的執(zhí)行。創(chuàng)建進(jìn)程池的語法結(jié)構(gòu):

進(jìn)程池對象=Pool(N)馬馳率風(fēng),羊致清和Pool進(jìn)程池方法名功能描述apply_async(func,args,kwargs)使用非阻塞方式調(diào)用函數(shù)funcapply(func,args,kwargs)使用阻塞方式調(diào)用函數(shù)funcclose()關(guān)閉進(jìn)程池,不再接收新任務(wù)terminate()不管任務(wù)是否完成,立即終止join()阻塞主進(jìn)程,必須在terminate()或close()之后使用馬馳率風(fēng),羊致清和并發(fā)和并行并發(fā)是指兩個或多個事件同一時間間隔發(fā)生,多個任務(wù)被交替輪換著執(zhí)行,比如A事件是吃蘋果,在吃蘋果的過程中有快遞員敲門讓你收下快遞,收快遞就是B事件,那么收完快遞繼續(xù)吃沒吃完的蘋果。這就是并發(fā)。馬馳率風(fēng),羊致清和并發(fā)和并行并行指兩個或多個事件在同一時刻發(fā)生,多個任務(wù)在同一時刻在多個處理器上同時執(zhí)行。比如A事件是泡腳,B事件是打電話,C事件是記錄電話內(nèi)容,這三件時則可以在同一時刻發(fā)生,這就是并行。馬馳率風(fēng),羊致清和進(jìn)程之間的通信100多個進(jìn)程之間數(shù)據(jù)可以共享嗎?進(jìn)程A進(jìn)程Baa+=30a-=50馬馳率風(fēng),羊致清和進(jìn)程之間的通信各進(jìn)程之間的數(shù)據(jù)操作馬馳率風(fēng),羊致清和進(jìn)程之間的通信進(jìn)程之間可以通過隊(duì)列(Queue)進(jìn)行通信,隊(duì)列是一種先進(jìn)先出(FirstInFirstOut)的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建隊(duì)列的語法結(jié)構(gòu):

隊(duì)列對象=Queue(N)馬馳率風(fēng),羊致清和進(jìn)程之間的通信方法名稱功能描述qsize()獲取當(dāng)前隊(duì)列包含的消息數(shù)量empty()判斷隊(duì)列是否為空,為空結(jié)果為True,否則為Falsefull()判斷隊(duì)列是否滿了,滿結(jié)果為True,否則為Falseget(block=True)獲取隊(duì)列中的一條消息,然后從隊(duì)列中移除,block默認(rèn)值為Trueget_nowait()相當(dāng)于get(block=False),消息隊(duì)列為空時,拋出異常put(item,block=True)將item消息放入隊(duì)列,block默認(rèn)為Trueput_nowait(item)相當(dāng)于put(item,block=False)馬馳率風(fēng),羊致清和進(jìn)程之間的通信使用隊(duì)列實(shí)現(xiàn)進(jìn)程之間通信的原理是什么呢?馬馳率風(fēng),羊致清和線程線程線程是CPU可調(diào)度的最小單位,被包含在進(jìn)程中,是進(jìn)程中實(shí)際的運(yùn)作單位。一個進(jìn)程中可以擁有N多個線程并發(fā)執(zhí)行,而每個線程并行執(zhí)行不同的任務(wù)。程序進(jìn)程2進(jìn)程1進(jìn)程3線程A線程B線程C馬馳率風(fēng),羊致清和創(chuàng)建線程的方式函數(shù)式創(chuàng)建線程的語法結(jié)構(gòu): t=Thread(group,target,name,args,kwargs)參數(shù)說明:group:創(chuàng)建線程對象的進(jìn)程組target:創(chuàng)建的線程對象所要執(zhí)行的目標(biāo)函數(shù)name:創(chuàng)建線程對象的名稱,默認(rèn)為“Tread-n”args:用元組以位置參數(shù)的形式傳入target對應(yīng)函數(shù)的參數(shù)kwargs:用字典以關(guān)鍵字參數(shù)的形式傳入target對應(yīng)函數(shù)的參數(shù)馬馳率風(fēng),羊致清和創(chuàng)建線程的方式使用Thread子類創(chuàng)建線程的操作步驟是:自定義類繼承threading模塊下的Thread類實(shí)現(xiàn)run方法馬馳率風(fēng),羊致清和線程之間的通信線程之間的數(shù)據(jù)可以共享嗎?100線程A線程Baa+=30a-=50馬馳率風(fēng),羊致清和線程之間的通信線程之間數(shù)據(jù)共享分析圖馬馳率風(fēng),羊致清和線程操作共享數(shù)據(jù)的安全性問題50ticket全局變量線程A線程B線程C馬馳率風(fēng),羊致清和線程操作共享數(shù)據(jù)的安全性問題共享數(shù)據(jù)線程A鎖定狀態(tài)共享數(shù)據(jù)非鎖定狀態(tài)acquire()方法release()方法Lock馬馳率風(fēng),羊致清和生產(chǎn)者與消費(fèi)者模式生產(chǎn)者與消費(fèi)者模式是線程模型中的經(jīng)典問題,與編程語言無關(guān)。當(dāng)程序中出現(xiàn)了明確的兩類任務(wù),一個任務(wù)負(fù)責(zé)生產(chǎn)數(shù)據(jù),一個任務(wù)負(fù)責(zé)處理生產(chǎn)的數(shù)據(jù)時就可以使用該模式。馬馳率風(fēng),羊致清和生產(chǎn)者與消費(fèi)者模式Python內(nèi)置模塊queue中的Queue類方法名稱功能描述put(item)向隊(duì)列中放置數(shù)據(jù),如果隊(duì)列為滿,則阻塞get()從隊(duì)列中取走數(shù)據(jù),如果隊(duì)列為空,則阻塞join()如果隊(duì)列不為空,則等待隊(duì)列變?yōu)榭誸ask_done()消費(fèi)者從隊(duì)列中取走一項(xiàng)數(shù)據(jù),當(dāng)隊(duì)列變?yōu)榭諘r,喚醒調(diào)用join()的線程馬馳率風(fēng),羊致清和本章總結(jié)程序:是指一系列有序指令的集合進(jìn)程:啟動后的程序稱為進(jìn)程,系統(tǒng)會為進(jìn)程分配內(nèi)存空間。創(chuàng)建進(jìn)程的語法結(jié)構(gòu)Process(group=None,target,name,args,kwargs)進(jìn)程池:當(dāng)需要上百、上千個進(jìn)程的時候,就可以使用進(jìn)程池Pool創(chuàng)建進(jìn)程池的語法結(jié)構(gòu)進(jìn)程池對象=Pool(N)并發(fā):是指兩個或多個事件同一時間間隔發(fā)生,多個任務(wù)被交替輪換著執(zhí)行并行:是指兩個或多個事件在同一時刻發(fā)生,多個任務(wù)在同一時刻在多個處理器上同時執(zhí)行馬馳率風(fēng),羊致清和本章總結(jié)進(jìn)程之間不存在共享數(shù)據(jù),但可以使用隊(duì)列進(jìn)行通信線程是CPU可調(diào)度的最小單位,被包含在進(jìn)程中,是進(jìn)程中實(shí)際

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論