Python threading模塊提供Event對象用於線程間通信。它提供了一組、拆除、等待用於線程間通信的其他方法。
event它是溝通中最簡單的一個過程之中,一個線程產生一個信號,號。Python 通過threading.Event()產生一個event對象。event對象維護一個內部標志(標志初始值為False),通過set()將其置為True。wait(timeout)則用於堵塞線程直至Flag被set(或者超時,可選的),isSet()用於查詢標志位是否為True,Clear()則用於清除標志位(使之為False)。
舉例:
下述是一段模擬“client監聽並處理硬件port消息”的程序片段:硬件port消息發送時機是隨機的(通過random實現),read線程負責讀消息並通知parse線程去處理。
import threading
import time
import random
L = []
def read():
count =2
while 1:
count = random.randint(0,1)
if count:
L.append('Hello, darling,I love you\n')
L.append('You are so sweet~\n')
if L:
evt.set()
print 'new rcvd sent to \'parse thread\'\n'
time.sleep(2)
print 'never here\n'
def parse():
while 1:
if evt.isSet():
evt.clear()
print repr(len(L)) +' messages to parse:\n'
while L:
print L.pop(0)
print 'all msg prased,sleep 2s\n'
time.sleep(2)
else:
print 'no message rcved\n'
time.sleep(2)
print 'quit parse\n'
if __name__ == '__main__':
evt = threading.Event()
R = threading .Thread(target = read)
P = threading .Thread(target = parse)
R.start()
P.start()
time.sleep(2)
R.join()
P.join()
#time.sleep(2)
print 'end'
版權聲明:本文博客原創文章,博客,未經同意,不得轉載--“http://blog.csdn.net/suipingsp”。
