多线程—事件Event
線程的一個關鍵特性是每個線程都是獨立運行且狀態不可預測。如果程序中的其他線程需要通過判斷某個線程的狀態來確定自己下一步的操作,這時線程同步問題就會變得非常棘手。為了解決這些問題,我們需要使用threading庫中的Event對象。對象包含一個可由線程設置的信號標志,它允許線程等待某些事件的發生。
在初始情況下,Event對象中的信號標志被設置為假。如果有線程等待一個Event對象,而這個Event對象的標志為假,那么這個線程將會被一直阻塞直至該標志為真。一個線程如果將一個Event對象的信號標志設置為真;它將喚醒所有等待這個Event對象的線程。如果一個線程等待一個已經被設置為真的Event對象,那么它將忽略這個事件,繼續執行
Event()可以創建一個事件管理標志,該標志(event)默認為False,event對象主要有四種方法可以調用:
event.wait(timeout=None):調用該方法的線程會被阻塞,如果設置了timeout參數,超時后,線程會停止阻塞繼續執行;
event.set():將event的標志設置為True,調用wait 方法的所有線程將被喚醒;
event.clear():將event的標志設置為Fa1se,調用wait方法的所有線程將被阻塞;
event.is_set():判斷event的標志是否為True。
需求:
線程1,代表門,一開始是打開的,每3秒需要自動關閉一下,如果有人通過,需要重新刷卡打開
線程2,代表人,人通過門,如果門是打開的直接通過,如果沒有打開需要刷卡,之后門就已經打開了,通知人繼續進入
總結
以上是生活随笔為你收集整理的多线程—事件Event的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL—事务及其特征
- 下一篇: 多线程—异步执行