以下是本文所涵蓋的所有專業(yè)的簡要總結:
什么是python中的多線程?
什么時候在Python中使用多線程?
如何在Python中實現(xiàn)多線程?
如何在Python中創(chuàng)建線程?
在Python中使用多線程的優(yōu)點
首先,讓我們先嘗試理解多任務處理,然后才開始學習Python中的多線程。
Python中的多任務處理是什么?
一般來說,多任務處理是一種同時執(zhí)行多項任務的能力。在技術上,多任務處理是指操作系統(tǒng)同時執(zhí)行不同任務的能力。例如,你在你的電腦上下載一些東西,聽歌,同時玩游戲等等。所有這些任務都由同一個操作系統(tǒng)同步執(zhí)行。這只不過是多任務處理,它不僅可以幫助您節(jié)省時間,而且還可以提高工作效率。
這是小編準備的python學習資料,關注,轉發(fā),私信小編“01”即可獲??!
在操作系統(tǒng)中有兩種類型的多任務處理:
在本文中,您將了解到 線程基 多任務或 多線程 .
什么是線?
線程基本上是一個獨立執(zhí)行流程。單個進程可以由多個線程組成。程序中的每個線程都執(zhí)行特定的任務。例如,當你在電腦上玩游戲時,比如說國際足聯(lián),整個游戲是一個單一的過程。,但它由幾個線程組成,負責播放音樂、接收用戶的輸入、同步運行對手等。所有這些都是單獨的線程,負責在同一個程序中執(zhí)行這些不同的任務。
每個進程都有一個始終在運行的線程。這是主線。這個主線程實際上創(chuàng)建子線程對象。子線程也由主線程啟動。在本文中,我將進一步介紹如何檢查當前運行的線程。
因此,我希望你們已經(jīng)清楚地理解了什么是一條線。接下來,讓我們看看Python中的多線程是什么。
什么時候在Python中使用多線程?
多線程是非常有用的節(jié)省時間和提高性能,但它不能適用于任何地方。
在前面的FIFA示例中,音樂線程獨立于接受輸入的線程,而接受輸入的線程獨立于運行對手的線程。這些線程獨立運行,因為它們不相互依賴。
因此,只有當單個線程之間的依賴關系不存在時,才能使用多線程。
本文進一步展示了如何在Python中實現(xiàn)多線程。
如何在Python中實現(xiàn)多線程?
可以通過導入穿線模塊。
在導入此模塊之前,您必須安裝此模塊。要在anaconda環(huán)境中安裝它,請在anaconda提示符上執(zhí)行以下命令:
conda安裝-c conda-鍛造tbb
成功安裝它之后,可以使用以下任何命令導入線程模塊:
現(xiàn)在已經(jīng)安裝了線程模塊,讓我們繼續(xù)使用Python進行多線程處理。
如何在Python中創(chuàng)建線程?
Python中的線程可以通過三種方式創(chuàng)建:
而不創(chuàng)建類
Python中的多線程也可以在不創(chuàng)建類的情況下完成。下面是一個演示相同內(nèi)容的示例:
例子:
from threading import *print(current_thread().getName())def mt(): print('Child Thread')child=Thread(target=mt)child.start()print('Executing thread name :',current_thread().getName())
產(chǎn)出:
上面的輸出顯示,存在的第一個線程是主線程。然后,這個主線程創(chuàng)建一個執(zhí)行函數(shù)的子線程,然后主線程再次執(zhí)行最后的print語句。
現(xiàn)在讓我們繼續(xù)前進,看看如何通過擴展Thread類在python中執(zhí)行多線程。
通過擴展Thread類:
當通過擴展Thread類創(chuàng)建子類時,子類表示一個新線程正在執(zhí)行某些任務。在擴展Thread類時,子類只能覆蓋兩個方法,即_init_()方法和run()方法。除了這兩個方法之外,其他任何方法都不能被重寫。
下面是如何擴展Thread類以創(chuàng)建線程的示例:
例子:
import threadingimport timeclass mythread(threading.Thread): def run(self): for x in range(7): print('Hi from child')a = mythread()a.start()a.join()print('Bye from',current_thread().getName())
產(chǎn)出:
孩子問好
孩子問好
孩子問好
孩子問好
孩子問好
孩子問好
孩子問好
主線再見
上面的示例顯示類myclass繼承Thread類,子類,即myclass重寫Run方法。默認情況下,任何類函數(shù)的第一個參數(shù)都必須是Self,它是指向當前對象的指針。輸出顯示子線程執(zhí)行run()方法,主線程等待Child執(zhí)行完成。這是因為JOIN()函數(shù),它使主線程等待子線程完成。
這種創(chuàng)建線程的方法是最好的方法,因為它是標準的方法。但是,如果希望在不繼承或擴展Thread類的情況下創(chuàng)建線程,則可以采用以下方式。
不擴展線程類
要在不擴展Thread類的情況下創(chuàng)建線程,可以執(zhí)行以下操作:
例子:
產(chǎn)出:
兒童
兒童
兒童
兒童
兒童
兒童
兒童
已完成
子線程執(zhí)行myfunc,然后主線程執(zhí)行最后一個print語句。
使用線程的優(yōu)點
多線程有許多優(yōu)點,其中一些優(yōu)點如下:
下面是一個示例,用于檢查在python中使用和不使用多線程執(zhí)行代碼所需的時間:
Example:import timedef sqr(n): for x in n: time.sleep(1) x%2def cube(n): for x in n: time.sleep(1) x%3n=[1,2,3,4,5,6,7,8]s=time.time()sqr(n)cube(n)e=time.time()print(e-s)
產(chǎn)出:
以上是在不使用線程的情況下執(zhí)行程序所需的輸出時間?,F(xiàn)在讓我們使用線程,看看同一個程序發(fā)生了什么:
例子:
import threadingfrom threading import *import timedef sqr(n): for x in n: time.sleep(1) print('Remainder after dividing by 2',x%2)def cube(n): for x in n: time.sleep(1) print('Remainder after dividing by 3',x%3)n=[1,2,3,4,5,6,7,8]start=time.time()t1=Thread(target=sqr,args=(n,))t2=Thread(target=cube,args=(n,))t1.start()time.sleep(1)t2.start()t1.join()t2.join()end=time.time()print(end-start)
產(chǎn)出: 9.040220737457275
上面的輸出清楚地表明,與不使用線程的相同程序執(zhí)行所需的時間相比,我們使用線程所花費的時間要少得多。
我希望您能夠清楚地了解本文中涉及到的與Python中的多線程有關的概念。確保盡可能多地實踐,因為這是編程中使用的最重要的概念之一。