首頁 >後端開發 >Python教學 >Python執行緒下事件用法的簡單介紹

Python執行緒下事件用法的簡單介紹

不言
不言原創
2018-09-11 16:09:141815瀏覽

這篇文章帶給大家的內容是Python線程下事件的用法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

事件用於在執行緒之間通訊。一個線程發送【事件】訊號,一個或多個其他線程等待它。

Event實例管理一個內部標誌,可以使用set()方法將它置為True,或使用clear()方法將它重設為False。 wait()方法將會阻塞,直到標誌為True。

語法:

e=Event()
创建新的Event实例,并将内部标志设置为False。

常用方法:

e.is_set():只有当内部标志设为True时才返回True

e.set():将内部标志设置为True。等待它变为True的所有线程都讲被唤醒。

e.clear():将内部标志重置为False。

e.wait(timeout):阻塞直到内部标志为True。如果调用时内部标志为True,此方法将立即返回。
否则,它将阻塞,直到另一个线程调用set()方法将标志设置为True,或者出现可选的超时时。

注意

儘管Event物件可用於給其他執行緒發送訊號,但不應該使用他們來實現在生產者和消費者的通知,例如下面程式碼:
evt=Event()

def producer():
    while True:
        #生产项
        ...
        evt.signal()
def consumer():
    while True:
        #等待一个项
        evt.wait()
        #消费项
        ...
        #清除事件并再次等待
        evt.clear()

應該盡量避免上面程式碼,因為這段程式碼不可靠,因為在evt.wait() 與evt.clear()操作之間,生產者可能生產了一個新項。但是,透過清楚事件,在生產者創建一個新項目之前,消費者可能看不到這個新項目。最好的情況是:程序將經過一段很短的停滯,對項的處理被莫名其妙的延遲。最壞的情況是,由於事件訊號遺失,整個程式將會掛起。要解決這類問題,最好使用條件變數。

相關推薦:

Python多執行緒程式設計簡單介紹

#詳解python多執行緒、鎖、event事件機制的簡單使用

用Python實作一個簡單的執行緒池

以上是Python執行緒下事件用法的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

相關文章

看更多