中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么實現線程同步

發布時間:2022-01-24 16:15:50 來源:億速云 閱讀:155 作者:zzz 欄目:開發技術

這篇文章主要介紹“Python中怎么實現線程同步”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python中怎么實現線程同步”文章能幫助大家解決問題。

使用 Thread 對象的 Lock 和 Rlock 可以實現簡單的線程同步,這兩個對象都有 acquire 方法和 release 方法,對于那些需要每次只允許一個線程操作的數據,可以將其操作放到 acquire 和 release 方法之間。如下:

多線程的優勢在于可以同時運行多個任務(至少感覺起來是這樣)。但是當線程需要共享數據時,可能存在數據不同步的問題。

考慮這樣一種情況:一個列表里所有元素都是0,線程”set”從后向前把所有元素改成1,而線程”print”負責從前往后讀取列表并打印。

那么,可能線程”set”開始改的時候,線程”print”便來打印列表了,輸出就成了一半0一半1,這就是數據的不同步。為了避免這種情況,引入了鎖的概念。

鎖有兩種狀態——鎖定和未鎖定。每當一個線程比如”set”要訪問共享數據時,必須先獲得鎖定;如果已經有別的線程比如”print”獲得鎖定了,那么就讓線程”set”暫停,也就是同步阻塞;等到線程”print”訪問完畢,釋放鎖以后,再讓線程”set”繼續。

經過這樣的處理,打印列表時要么全部輸出0,要么全部輸出1,不會再出現一半0一半1的尷尬場面。

實例:

#!/usr/bin/python3import threading
import time

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
       threading.Thread.__init__(self)
       self.threadID = threadID
       self.name = name
       self.counter = counter
   def run(self):
       print ("開啟線程: " + self.name)
       # 獲取鎖,用于線程同步       threadLock.acquire()
       print_time(self.name, self.counter, 3)
       # 釋放鎖,開啟下一個線程       threadLock.release()

def print_time(threadName, delay, counter):
   while counter:
       time.sleep(delay)
       print ("%s: %s" % (threadName, time.ctime(time.time())))
       counter -= 1

threadLock = threading.Lock()
threads = []# 創建新線程thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)# 開啟新線程thread1.start()
thread2.start()# 添加線程到線程列表threads.append(thread1)
threads.append(thread2)# 等待所有線程完成for t in threads:
   t.join()print ("退出主線程")

執行以上程序,輸出結果為:

開啟線程: Thread-1
開啟線程: Thread-2
Thread-1: Wed Apr  6 11:52:57 2016
Thread-1: Wed Apr  6 11:52:58 2016
Thread-1: Wed Apr  6 11:52:59 2016
Thread-2: Wed Apr  6 11:53:01 2016
Thread-2: Wed Apr  6 11:53:03 2016
Thread-2: Wed Apr  6 11:53:05 2016
退出主線程

關于“Python中怎么實現線程同步”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福安市| 高邮市| 叙永县| 大丰市| 台州市| 禹州市| 徐水县| 清苑县| 永顺县| 图们市| 盐城市| 阿克陶县| 旬邑县| 龙口市| 深水埗区| 临澧县| 禄劝| 丰城市| 会东县| 合肥市| 汉川市| 黔南| 临猗县| 永修县| 柳州市| 定边县| 延川县| 襄垣县| 盘锦市| SHOW| 体育| 三台县| 凭祥市| 南靖县| 肇东市| 长治市| 贞丰县| 璧山县| 红安县| 淳安县| 象州县|