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

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

