最近写程序要用到线程间通信,在网上搜了些资料,测试了一下代码,在这里总结一下。
Python实现线程间通信有几种方法,在这里介绍Event对象。
Event对象实现了简单的线程通信机制,它提供了设置信号、清除信号、等待等用于实现线程间的通信。
1.设置信号
使用Event对象的set()方法可以设置Event对象内部的信号标志为真。Event对象提供了isSet()方法来判断其内部信号标志的状态。当使用Event对象的set()方法后,isSet()方法返回真。
2.清除信号
使用Event对象的clear()方法可以清除Event对象内部的信号标志,即将其设置为假。当使用Event对象的clear()方法后,isSet()方法返回假。
3.等待
Event对象wait的wait()方法只有在其内部信号为真时才会很快地执行完成并返回。当Event对象的内部信号标志为假时,则wait()方法一直等到其为真时才返回。另外还可以向wait()方法传递参数,以设定最长等待时间。
测试代码如下:
from threading import *
event1 = Event()
event2 = Event()
def test1():
for i in range(5):
event1.wait()
print currentThread().name, i
event1.clear()
event2.set()
def test2():
for i in range(5):
event2.wait()
print currentThread().name, i
event2.clear()
event1.set()
Thread(target = test1).start()
Thread(target = test2).start()
event1.set()
运行代码结果为:
================================
>>>
>>> Thread-1 0
Thread-2 0
Thread-1 1
Thread-2 1
Thread-1 2
Thread-2 2
Thread-1 3
Thread-2 3
Thread-1 4
Thread-2 4