首頁 >後端開發 >Python教學 >python Semaphore(信號量)是什麼? (實例詳解)

python Semaphore(信號量)是什麼? (實例詳解)

乌拉乌拉~
乌拉乌拉~原創
2018-08-23 17:42:116641瀏覽

在以下的文章之中我們來了解一下什麼是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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多