導航:首頁 > 編程語言 > python多線程計劃

python多線程計劃

發布時間:2025-04-25 02:51:57

python多線程的幾種方法

Python進階(二十六)-多線程實現同步的四種方式
臨界資源即那些一次只能被一個線程訪問的資源,典型例子就是列印機,它一次只能被一個程序用來執行列印功能,因為不能多個線程同時操作,而訪問這部分資源的代碼通常稱之為臨界區。
鎖機制
threading的Lock類,用該類的acquire函數進行加鎖,用realease函數進行解鎖
import threadingimport timeclass Num:
def __init__(self):
self.num = 0
self.lock = threading.Lock() def add(self):
self.lock.acquire()#加鎖,鎖住相應的資源
self.num += 1
num = self.num
self.lock.release()#解鎖,離開該資源
return num

n = Num()class jdThread(threading.Thread):
def __init__(self,item):
threading.Thread.__init__(self)
self.item = item def run(self):
time.sleep(2)
value = n.add()#將num加1,並輸出原來的數據和+1之後的數據
print(self.item,value)for item in range(5):
t = jdThread(item)
t.start()
t.join()#使線程一個一個執行

當一個線程調用鎖的acquire()方法獲得鎖時,鎖就進入「locked」狀態。每次只有一個線程可以獲得鎖。如果此時另一個線程試圖獲得這個鎖,該線程就會變為「blocked」狀態,稱為「同步阻塞」(參見多線程的基本概念)。
直到擁有鎖的線程調用鎖的release()方法釋放鎖之後,鎖進入「unlocked」狀態。線程調度程序從處於同步阻塞狀態的線程中選擇一個來獲得鎖,並使得該線程進入運行(running)狀態。
信號量
信號量也提供acquire方法和release方法,每當調用acquire方法的時候,如果內部計數器大於0,則將其減1,如果內部計數器等於0,則會阻塞該線程,知道有線程調用了release方法將內部計數器更新到大於1位置。
import threadingimport timeclass Num:
def __init__(self):
self.num = 0
self.sem = threading.Semaphore(value = 3) #允許最多三個線程同時訪問資源

def add(self):
self.sem.acquire()#內部計數器減1
self.num += 1
num = self.num
self.sem.release()#內部計數器加1
return num

n = Num()class jdThread(threading.Thread):
def __init__(self,item):
threading.Thread.__init__(self)
self.item = item def run(self):
time.sleep(2)
value = n.add()
print(self.item,value)for item in range(100):

閱讀全文

與python多線程計劃相關的資料

熱點內容
哪裡可以買拆車件app 瀏覽:990
限流演算法漏桶和令牌桶區別 瀏覽:313
程序員怎麼找兼職 瀏覽:798
java編譯路徑 瀏覽:281
伺服器修改mac地址是什麼 瀏覽:579
商城訂單介面api加密 瀏覽:26
電話鍵盤加密應用 瀏覽:488
廣聯達安裝教程未檢測到加密鎖 瀏覽:340
ubuntu1404命令 瀏覽:53
rd會話主機伺服器是什麼 瀏覽:145
模擬集成電路設計pdf 瀏覽:616
數控編程培訓行業 瀏覽:41
怎麼樣自製變形折紙解壓玩具 瀏覽:930
ethtoolandroid 瀏覽:417
文件夾如何分類存檔 瀏覽:724
程序員和地產公司哪個賺的多 瀏覽:556
遞歸二分查找java 瀏覽:151
麥當勞app早餐怎麼點不了 瀏覽:820
linuxmysql插入 瀏覽:598
vim命令復制 瀏覽:819