zoukankan      html  css  js  c++  java
  • Python多线程的threading Event

    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
    ')   
                L.append('You are so sweet~
    ')   
            if L:   
               evt.set()   
               print 'new rcvd sent to 'parse thread'
    '   
            time.sleep(2)   
        print 'never here
    '   
           
    def parse():   
        while 1:   
           if evt.isSet():   
                evt.clear()          
                print repr(len(L)) +' messages to parse:
    '   
                while L:   
                    print L.pop(0)   
                print 'all msg prased,sleep 2s
    '   
                time.sleep(2)   
           else:   
                print 'no message rcved
    '   
                time.sleep(2)   
        print 'quit parse
    '   
    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”。

  • 相关阅读:
    渗透前期准备--信息收集
    sqlmap极其详细查询文档
    namp常用测试脚本记录
    队列的基础使用
    线程与非线程示例
    爬虫--多线程编程-提高效率--泛见(犯贱)志趣图标题和链接爬取
    requests模块代理使用、post数据传输使用、get参数传输
    pytesseract模块验证码图片识别
    课时72.子元素选择器(掌握)
    课时71.后代选择器(掌握)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4687348.html
Copyright © 2011-2022 走看看