在以下的文章之中我們來了解一下什麼是python中的Semaphore(信號量)。了解python信號量相關知識,以及Semaphore(信號量)應用於python程式設計之中能起到什麼樣的作用。
Semaphore(信號量)
互斥鎖同時只允許一個執行緒更改數據,而Semaphore是同時允許一定數量的執行緒更改數據,如廁所有3個坑,那最多只允許3個人上廁所,後面的人只能等裡面有人出來了才能再進去。
import threading,time def run(n): semaphore.acquire() time.sleep(1) print("run the thread: %s\n" %n) semaphore.release() if __name__ == '__main__': num= 0 semaphore = threading.BoundedSemaphore(5) #最多允许5个线程同时运行 for i in range(20): t = threading.Thread(target=run,args=(i,)) t.start() while threading.active_count() != 1: pass #print threading.active_count() else: print('----all threads done---') print(num)
Events線程間通信
Python提供了Event物件用於線程間通信,它是由線程設定的訊號標誌,如果訊號標誌位真,則其他執行緒等待直到訊號接觸。
Event物件實作了簡單的執行緒通訊機制,它提供了設定訊號,清楚訊號,等待等用於實作執行緒間的通訊。
Events的使用
event = threading.Event()
event.wait( )
Event物件wait的方法只有在內部訊號為真的時候才會很快的執行並完成回傳。當Event物件的內部訊號標誌位元假時,則wait方法一直等待到其為真時才返回。
event.set()
使用Event的set()方法可以設定Event物件內部的訊號標誌為真。 Event物件提供了isSet()方法來判斷其內部訊號標誌的狀態。當使用event物件的set()方法後,isSet()方法傳回真
event.clear()
使用Event物件的clear()方法可以清除Event物件內部的訊號標誌,即將其設為假,當使用Event的clear方法後,isSet()方法會傳回假。
以上就是本篇文章所講述的所有內容,這篇文章主要介紹了pythonSemaphore(信號量)的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。
更多相關知識,請造訪php中文網Python教學欄位。
以上是python Semaphore(信號量)是什麼? (實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!