Python線程event


python線程的事件用於主線程控制其他線程的執行,事件主要提供了三個方法wait、clear、set

事件處理的機制:全局定義了一個“Flag”,如果“Flag”值為 False,那么當程序執行 event.wait 方法時就會阻塞,如果“Flag”值為True,那么event.wait 方法時便不再阻塞。

  • clear:將“Flag”設置為False
  • set:將“Flag”設置為True

 

 

用 threading.Event 實現線程間通信
使用threading.Event可以使一個線程等待其他線程的通知,我們把這個Event傳遞到線程對象中,
Event默認內置了一個標志,初始值為False。
一旦該線程通過wait()方法進入等待狀態,直到另一個線程調用該Event的set()方法將內置標志設置為True時,
該Event會通知所有等待狀態的線程恢復運行。

import threading 
import time  
   
class MyThread(threading.Thread):  
    def __init__(self, signal):  
        threading.Thread.__init__(self) 
        # 初始化 
        self.singal = signal  
           
    def run(self):  
        print "I am %s,I will sleep ..."%self.name  
        # 進入等待狀態
        self.singal.wait()  
        print "I am %s, I awake..." %self.name  
           
if __name__ == "__main__":
    # 初始 為 False 
    singal = threading.Event()  
    for t in range(0, 3):  
        thread = MyThread(singal)  
        thread.start()  
       
    print "main thread sleep 3 seconds... "  
    time.sleep(3)  
    # 喚醒含有signal, 處於等待狀態的線程  
    singal.set()
import threading
 
 
def do(event):
    print 'start'
    event.wait()
    print 'execute'
 
 
event_obj = threading.Event()
for i in range(10):
    t = threading.Thread(target=do, args=(event_obj,))
    t.start()
 
event_obj.clear() #繼續阻塞
inp = raw_input('input:')
if inp == 'true':
    event_obj.set() #喚醒

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM