線程課件講解_第1頁
線程課件講解_第2頁
線程課件講解_第3頁
線程課件講解_第4頁
線程課件講解_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

1、線程 線程 多線程的使用 線程執(zhí)行帶有參數(shù)的任務(wù) 線程注意點 進程和線程對比能夠知道線程的作用線程線程的介紹在Python中,想要實現(xiàn)多任務(wù)除了使用進程,還可以使用線程來完成,線程是實現(xiàn)多任務(wù)的另外一種方式線程的概念線程是進程中執(zhí)行代碼的一個分支,每個執(zhí)行分支(線程)要想工作執(zhí)行代碼需要cpu進行調(diào)度 ,也就是說線程是cpu調(diào)度的基本單位,每個進程至少都有一個線程,而這個線程就是我們通常說的主線程線程線程的作用 線程 多線程的使用 線程執(zhí)行帶有參數(shù)的任務(wù) 線程注意點 進程和線程對比能夠使用多線程完成多任務(wù)多線程的使用導(dǎo)入線程模塊線程類Thread參數(shù)說明Thread(group , targe

2、t , name , args , kwargs)group: 線程組,目前只能使用Nonetarget: 執(zhí)行的目標任務(wù)名name: 線程名,一般不用設(shè)置args: 以元組的方式給執(zhí)行任務(wù)傳參kwargs: 以字典方式給執(zhí)行任務(wù)傳參多線程的使用多線程完成多任務(wù)的代碼導(dǎo)入線程模塊import threading創(chuàng)建子線程并指定執(zhí)行的任務(wù)sub_thread = threading.Thread(target=任務(wù)名)啟動線程執(zhí)行任務(wù)sub_thread.start()多任務(wù)的介紹 線程 多線程的使用 線程執(zhí)行帶有參數(shù)的任務(wù) 線程注意點 進程和線程對比能夠?qū)懗鼍€程執(zhí)行帶有參數(shù)的任務(wù)線程執(zhí)行帶有參

3、數(shù)的任務(wù)線程執(zhí)行帶有參數(shù)的任務(wù)的介紹前面我們使用線程執(zhí)行的任務(wù)是沒有參數(shù)的,假如我們使用線程執(zhí)行的任務(wù)帶有參數(shù),如何給函數(shù)傳參呢?Thread類執(zhí)行任務(wù)并給任務(wù)傳參數(shù)有兩種方式:args 表示以元組的方式給執(zhí)行任務(wù)傳參kwargs 表示以字典方式給執(zhí)行任務(wù)傳參線程執(zhí)行帶有參數(shù)的任務(wù)args參數(shù)的使用 線程執(zhí)行帶有參數(shù)的任務(wù)kwargs參數(shù)的使用 線程執(zhí)行任務(wù)并傳參有兩種方式:元組方式傳參(args):元組方式傳參一定要和參數(shù)的順序保持一致字典方式傳參(kwargs):字典方式傳參字典中的key一定要和參數(shù)名保持一致多任務(wù)的介紹 線程 多線程的使用 線程執(zhí)行帶有參數(shù)的任務(wù) 線程注意點 進程和線程

4、對比能夠說出線程的注意點線程注意點線程的注意點介紹1. 線程之間執(zhí)行是無序的2. 主線程會等待所有的子線程執(zhí)行結(jié)束再結(jié)束3. 線程之間共享全局變量4. 線程之間共享全局變量數(shù)據(jù)出現(xiàn)錯誤問題線程注意點線程之間執(zhí)行是無序的 線程注意點主線程會等待所有的子線程執(zhí)行結(jié)束再結(jié)束 假如我們現(xiàn)在創(chuàng)建一個子線程,這個子線程執(zhí)行完大概需要2.5秒鐘,現(xiàn)在讓主線程執(zhí)行1秒鐘就退出程序,查看一下執(zhí)行結(jié)果線程注意點主線程會等待所有的子線程執(zhí)行結(jié)束再結(jié)束 說明:通過上面代碼的執(zhí)行結(jié)果,我們可以得知:主線程會等待所有的子線程執(zhí)行結(jié)束再結(jié)束假如我們就讓主線程執(zhí)行1秒鐘,子線程就銷毀不再執(zhí)行,那怎么辦呢?我們可以設(shè)置守護主線

5、程守護主線程: 守護主線程就是主線程退出子線程銷毀不再執(zhí)行設(shè)置守護主線程有兩種方式: threading.Thread(target=show_info, daemon=True) 線程對象.setDaemon(True)線程注意點設(shè)置守護主線程的示例代碼: 線程注意點線程之間共享全局變量 定義一個列表類型的全局變量創(chuàng)建兩個子線程分別執(zhí)行向全局變量添加數(shù)據(jù)的任務(wù)和向全局變量讀取數(shù)據(jù)的任務(wù)查看線程之間是否共享全局變量數(shù)據(jù)線程注意點線程之間共享全局變量數(shù)據(jù)出現(xiàn)錯誤問題需求:定義兩個函數(shù),實現(xiàn)循環(huán)100萬次,每循環(huán)一次給全局變量加1創(chuàng)建兩個子線程執(zhí)行對應(yīng)的兩個函數(shù),查看計算后的結(jié)果 線程注意點錯誤分

6、析 兩個線程first_thread和second_thread都要對全局變量g_num(默認是0)進行加1運算,但是由于是多線程同時操作,有可能出現(xiàn)下面情況:在g_num=0時,first_thread取得g_num=0。此時系統(tǒng)把first_thread調(diào)度為”sleeping”狀態(tài),把second_thread轉(zhuǎn)換為”running”狀態(tài),t2也獲得g_num=0然后second_thread對得到的值進行加1并賦給g_num,使得g_num=1然后系統(tǒng)又把second_thread調(diào)度為”sleeping”,把first_thread轉(zhuǎn)為”running”。線程t1又把它之前得到的0加

7、1后賦值給g_num。這樣導(dǎo)致雖然first_thread和first_thread都對g_num加1,但結(jié)果仍然是g_num=1全局變量數(shù)據(jù)錯誤的解決辦法:線程同步: 保證同一時刻只能有一個線程去操作全局變量 同步: 就是協(xié)同步調(diào),按預(yù)定的先后次序進行運行。如:你說完,我再說, 好比現(xiàn)實生活中的對講機線程同步的方式:線程等待(join)線程注意點線程等待的示例代碼: 線程執(zhí)行執(zhí)行是無序的主線程默認會等待所有子線程執(zhí)行結(jié)束再結(jié)束,設(shè)置守護主線程的目的是主線程退出子線程銷毀。線程之間共享全局變量,好處是可以對全局變量的數(shù)據(jù)進行共享。線程之間共享全局變量可能會導(dǎo)致數(shù)據(jù)出現(xiàn)錯誤問題,可以使用線程同步

8、方式來解決這個問題, 線程等待(join)多任務(wù)的介紹 線程 多線程的使用 線程執(zhí)行帶有參數(shù)的任務(wù) 線程注意點 進程和線程對比能夠知道進程和線程的關(guān)系進程和線程對比進程和線程的對比的三個方向1. 關(guān)系對比2. 區(qū)別對比3. 優(yōu)缺點對比進程和線程對比關(guān)系對比1. 線程是依附在進程里面的,沒有進程就沒有線程2. 一個進程默認提供一條線程,進程可以創(chuàng)建多個線程進程和線程對比區(qū)別對比1. 進程之間不共享全局變量2. 線程之間共享全局變量,但是要注意資源競爭的問題,解決辦法: 互斥鎖或者線程同步3. 創(chuàng)建進程的資源開銷要比創(chuàng)建線程的資源開銷要大4. 進程是操作系統(tǒng)資源分配的基本單位,線程是CPU調(diào)度的基本單位5. 線程不能夠獨立執(zhí)行,必須依存在進程中6. 多進程開發(fā)比單進程多線程開發(fā)穩(wěn)定性要強進程和線程對比優(yōu)缺點對比進程優(yōu)缺點:優(yōu)點:可以用多核缺點:資源開銷大線程優(yōu)缺點:優(yōu)點:資源開

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論