python高效编程技巧13(如何在线程之间实现事件通知)

theading的Event使用的简单例子:

##############Event的使用说明###########################
def f(e):
    print "第一步:我在这里等你的通知 \n"
    # 当线程t调用start方法后,因为传递过来的Event对象在这里调用了wait()方法,所以线程会卡在这里
    e.wait()
    print "第三步:好的,我开始执行。。。执行完毕!"


e = Event()
t = Thread(target=f, args=(e,))
t.start()
# 当调用了e的set()方法
e.set()
print "第二步:f方法你可以继续执行了"


################Event的使用说明#########################

如何使用

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from threading import Thread, Event

'''
线程间的事件通知,可以使用标准库中的Threading.Event
1、等待事件一端调用wait,等待事件
2、通知事件一端调用set,通知事件
'''


# io线程
class motherThread(Thread):
    def __init__(self, event):
        # 要调用分类的构造器
        Thread.__init__(self)
        self.event = event

    def run(self):
        print "给我去买包盐"
        self.event.wait()
        print "好孩子,我做饭去了。。"


# 创建一个boyThread,模仿小孩去买盐
class boyThread(Thread):
    def __init__(self, name, event):
        Thread.__init__(self)
        self.name = name
        self.event = event

    def run(self):
        print "我是%s,买回了一包盐,给。。" % self.name
        self.event.set()


event = Event()
mother = motherThread(event)
mother.start()
boy = boyThread("小明", event)
boy.start()

你可能感兴趣的:(python)