码迷,mamicode.com
首页 > 编程语言 > 详细

Python多线程的threading Event

时间:2015-07-29 22:55:59      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

Python threading模块提供Event对象用于线程间通信。它提供了一组、拆除、等待用于线程间通信的其他方法。

event它是沟通中最简单的一个过程之中,一个线程产生一个信号,号。Python 通过threading.Event()产生一个event对象。event对象维护一个内部标志(标志初始值为False),通过set()将其置为True。wait(timeout)则用于堵塞线程直至Flag被set(或者超时,可选的),isSet()用于查询标志位是否为True,Clear()则用于清除标志位(使之为False)。

  设置\清除信号

  Event的set()方法可设置Event对象内部的信号标志为真,Event对象提供了isSet()方法来推断其内部信号标志的状态,使用set()方法后,isSet()方法返回True。clear()方法可清除Event对象内部的信号标志(设为False)。使用clear方法后。isSet()方法返回False 

 等待

 当Event对象的内部信号标志为False时。wait方法一直堵塞线程等待到其为真或者超时(若提供,浮点数,单位为秒)才返回,若Event对象内部标志为True则wait()方法马上返回。

举例:

下述是一段模拟“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”。

Python多线程的threading Event

标签:

原文地址:http://www.cnblogs.com/lcchuguo/p/4687348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!