Python進(jìn)程和線程之多線程的使用及說明
Python之多線程的使用
前面提到過進(jìn)程是由很多線程組成的,那么今天廖老師就詳細(xì)解釋了線程是如何運(yùn)行的。
首先,Python的標(biāo)準(zhǔn)庫提供了兩個(gè)模塊:_thread和threading,_thread是低級模塊,threading是高級模塊,對_thread進(jìn)行了封裝。
絕大多數(shù)情況下,我們只需要使用threading這個(gè)高級模塊。

根據(jù)廖老師的例子,運(yùn)行出來如此的結(jié)果。
任何 Python 程序默認(rèn)都在一個(gè)主線程中運(yùn)行,該線程通常名為 MainThread
threading.current_thread().name用于獲取當(dāng)前正在執(zhí)行的線程的名稱。
t = threading.Thread(target=loop, name='LoopThread')
這里使用 threading.Thread類來創(chuàng)建一個(gè)線程對象 ,也就是我們所需要的支線線程
start()方法會??啟動(dòng)新線程??
這意味著 Python 會創(chuàng)建新的執(zhí)行上下文,并??幾乎同時(shí)??開始在新線程中執(zhí)行 loop函數(shù)
重要的是,調(diào)用 start()后,主線程不會阻塞,它會繼續(xù)向下執(zhí)行(t.join()),而新線程 LoopThread也開始并發(fā)地執(zhí)行自己的任務(wù)。
不過由于多進(jìn)程中,同一個(gè)變量,各自有一份拷貝存在于每個(gè)進(jìn)程中,互不影響,而多線程中,所有變量都由所有線程共享,所以,任何一個(gè)變量都可以被任何一個(gè)線程修改,因此,線程之間共享數(shù)據(jù)最大的危險(xiǎn)在于多個(gè)線程同時(shí)改一個(gè)變量,把內(nèi)容給改亂了。
我們這里會引入一個(gè)lock語句
balance = 0
lock = threading.Lock()
def run_thread(n):
for i in range(100000):
# 先要獲取鎖:
lock.acquire()
try:
# 放心地改吧:
change_it(n)
finally:
# 改完了一定要釋放鎖:
lock.release()創(chuàng)建一個(gè)鎖就是通過threading.Lock()來實(shí)現(xiàn)。
不過這里的鎖雖然可以讓我們的內(nèi)容不那么紊亂,但是包含鎖的某段代碼實(shí)際上只能以單線程模式執(zhí)行,效率就大大地下降了甚至他會讓多個(gè)鎖在一起執(zhí)行可能形成一個(gè)死鎖。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python文件操作及內(nèi)置函數(shù)flush原理解析
這篇文章主要介紹了Python文件操作及內(nèi)置函數(shù)flush原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
對python中的six.moves模塊的下載函數(shù)urlretrieve詳解
今天小編就為大家分享一篇對python中的six.moves模塊的下載函數(shù)urlretrieve詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python虛擬環(huán)境管理工具virtualenv詳解
在Python開發(fā)過程中,我們常常需要管理不同項(xiàng)目的依賴,每個(gè)項(xiàng)目可能依賴不同版本的Python庫,因此,如何有效管理這些庫成為了開發(fā)者日常工作中不可忽視的問題,需要的朋友可以參考下2024-12-12
python如何將.tif格式圖批量轉(zhuǎn)化為.jpg格式圖
這篇文章主要介紹了python如何將.tif格式圖批量轉(zhuǎn)化為.jpg格式圖問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
python 多進(jìn)程和協(xié)程配合使用寫入數(shù)據(jù)
這篇文章主要介紹了python 多進(jìn)程和協(xié)程配合使用寫入數(shù)據(jù),幫助大家利用python高效辦公,感興趣的朋友可以了解下2020-10-10
Python開發(fā)入門之如何制作一個(gè)簡單的桌面應(yīng)用
這篇文章主要給大家介紹了關(guān)于Python開發(fā)入門之如何制作一個(gè)簡單的桌面應(yīng)用的相關(guān)資料,我們不僅可以使用Python的圖像處理庫,如PIL等來實(shí)現(xiàn)圖片的處理和識別,同時(shí)你還可以設(shè)計(jì)和開發(fā)具有圖形界面的桌面應(yīng)用程序,需要的朋友可以參考下2023-08-08
Caffe均值文件mean.binaryproto轉(zhuǎn)mean.npy的方法
今天小編就為大家分享一篇Caffe均值文件mean.binaryproto轉(zhuǎn)mean.npy的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
python中in和is的區(qū)別點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python中in和is的區(qū)別點(diǎn)總結(jié),有興趣的朋友可以跟著學(xué)習(xí)下。2021-05-05

