python threading多线程模块Event线程通信方法

发布时间:2020-04-25编辑:脚本学堂
有关python threading多线程模块Event实现线程通信的方法,Event对象用于线程间的相互通信,实际上Condition对象在一定程度上已经实现线程间的通信,需要的朋友参考下。

Event对象用于线程间的相互通信,实际上Condition对象在一定程度上已经实现线程间的通信,但Condition对象是每次仅有一个线程对共享数据进行操作,其他线程则等待。
而Event对象是由线程设置的信号标志,如果信号标志为真,则其他线程等待直到信号解除。

Event对象方法:
set():设置Event对象内部的信号为真,
isSet():判断内部信号标志的状态,当Event对象使用set()方法后,isSet()方法返回真
clear():清除内部信号标志,当使用clear()方法后,isSet()方法就会返回假
wait():当内部信号为真的时才会执行,如果内部信号为假则会一直等待

代码:
 

复制代码 代码示例:
#!/usr/bin/python
#
import threading            # 导入threading模块
class mythread(threading.Thread):
    def __init__(self,threadname):
        threading.Thread.__init__(self,name = threadname)
    def run(self):
        global event        # 使用全局Event对象
        if event.isSet():   # 判断Event对象内部信号标志
            event.clear()   # 若已设置标志则清除
            event.wait()    # 调用wait方法
            print self.getName()
        else:
            print self.getName()
            event.set() # 设置Event对象内部信号标志
event = threading.Event()       # 生成Event对象
event.set()             # 设置Event对象内部信号标志
tl = []
for i in range(10):
    t = mythread(str(i))
    tl.append(t)            # 生成线程列表
                 
for i in tl:
    i.start()           # 运行线程
######运行结果######
>>> 1
0
3
2
5
4
7
6
9
8