Python多線程的threading Event

Python threading模塊提供Event對象用於線程間通訊。它提供了一組、拆除、等待用於線程間通訊的其餘方法。python

event它是溝通中最簡單的一個過程之中,一個線程產生一個信號,號。Python 經過threading.Event()產生一個event對象。event對象維護一個內部標誌(標誌初始值爲False),經過set()將其置爲True。wait(timeout)則用於堵塞線程直至Flag被set(或者超時,可選的),isSet()用於查詢標誌位是否爲True,Clear()則用於清除標誌位(使之爲False)。app

  設置\清除信號dom

  Event的set()方法可設置Event對象內部的信號標誌爲真,Event對象提供了isSet()方法來推斷其內部信號標誌的狀態,使用set()方法後,isSet()方法返回True。clear()方法可清除Event對象內部的信號標誌(設爲False)。使用clear方法後。isSet()方法返回False ui

 等待spa

 當Event對象的內部信號標誌爲False時。wait方法一直堵塞線程等待到其爲真或者超時(若提供,浮點數,單位爲秒)才返回,若Event對象內部標誌爲True則wait()方法立刻返回。.net

舉例:線程

下述是一段模擬「client監聽並處理硬件port消息」的程序片斷:硬件port消息發送時機是隨機的(經過random實現),read線程負責讀消息並通知parse線程去處理。code

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」。對象

相關文章
相關標籤/搜索