Python多线程之threading Event
2014-10-20 17:22
471 查看
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()方法立即返回。
举例:
下述是一段模拟“客户端监听并处理硬件端口消息”的程序片段:硬件端口消息发送时机是随机的(通过random实现),read线程负责读消息并通知parse线程去处理。
设置\清除信号
Event的set()方法可设置Event对象内部的信号标志为真,Event对象提供了isSet()方法来判断其内部信号标志的状态,使用set()方法后,isSet()方法返回True。clear()方法可清除Event对象内部的信号标志(设为False),使用clear方法后,isSet()方法返回False
等待
当Event对象的内部信号标志为False时,wait方法一直阻塞线程等待到其为真或者超时(若提供,浮点数,单位为秒)才返回,若Event对象内部标志为True则wait()方法立即返回。
举例:
下述是一段模拟“客户端监听并处理硬件端口消息”的程序片段:硬件端口消息发送时机是随机的(通过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'
相关文章推荐
- 【Python】threading.Event模块控制多线程
- python:threading多线程模块-Event实现线程通信
- Python多线程之Threading.Event
- Python多线程的threading Event
- python多线程模块thread,threading,Queue
- Python多线程thread与threading实现
- python:threading多线程模块-创建线程
- Python多线程thread与threading实现
- Python模块学习 ---- threading 多线程控制和处理
- Python 多线程 Event
- python模块之threading: 在python中使用多线程
- Python标准库08 多线程与同步 (threading包)
- Python:使用threading模块实现多线程编程一[综述]
- Python模块学习 ---- threading 多线程控制和处理
- Python模块学习 ---- threading 多线程控制和处理
- Python多线程thread与threading实现
- Python:threading模块用于多线程控制和处理
- Python模块学习 ---- threading 多线程控制和处理
- python:threading多线程模块-Condition实现复杂的同步
- 【python标准库学习】thread,threading(一)多线程的介绍和使用