Python多线程编程(八):使用Event实现线程间通信


Posted in Python onApril 05, 2015

使用threading.Event可以实现线程间相互通信,之前的Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]我们已经初步实现了线程间通信的基本功能,但是更为通用的一种做法是使用threading.Event对象。使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,Event默认内置了一个标志,初始值为False。一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set()方法将内置标志设置为True时,该Event会通知所有等待状态的线程恢复运行。

''' 

Created on 2012-9-9 

 

@author: walfred 

@module: thread.TreadTest8 

'''  

 

import threading  

import time  

 

class MyThread(threading.Thread):  

    def __init__(self, signal):  

        threading.Thread.__init__(self)  

        self.singal = signal  

 

    def run(self):  

        print "I am %s,I will sleep ..."%self.name  

        self.singal.wait()  

        print "I am %s, I awake..." %self.name  

 

if __name__ == "__main__":  

    singal = threading.Event()  

    for t in range(0, 3):  

        thread = MyThread(singal)  

        thread.start()  

 

    print "main thread sleep 3 seconds... "  

    time.sleep(3)  

 

    singal.set()

运行效果如下:

I am Thread-1,I will sleep ...

I am Thread-2,I will sleep ...

I am Thread-3,I will sleep ...

main thread sleep 3 seconds...

I am Thread-1, I awake...I am Thread-2, I awake...

 

I am Thread-3, I awake...
Python 相关文章推荐
Python实现建立SSH连接的方法
Jun 03 Python
Python多进程同步简单实现代码
Apr 27 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
python实现拓扑排序的基本教程
Mar 11 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python函数声明和调用定义及原理详解
Dec 02 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
Pycharm调试程序技巧小结
Aug 08 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
Python多线程编程(七):使用Condition实现复杂同步
Apr 05 #Python
Python多线程编程(六):可重入锁RLock
Apr 05 #Python
Python多线程编程(五):死锁的形成
Apr 05 #Python
Python多线程编程(四):使用Lock互斥锁
Apr 05 #Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 #Python
Python多线程编程(二):启动线程的两种方法
Apr 05 #Python
Python多线程编程(一):threading模块综述
Apr 05 #Python
You might like
php adodb介绍
2009/03/19 PHP
php debug 安装技巧
2011/04/30 PHP
php在线代理转向代码
2012/05/05 PHP
php实现快速排序法函数代码
2012/08/27 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
字符串的replace方法应用浅析
2011/12/06 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
token 机制和实现方式
2020/12/15 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
Python3访问并下载网页内容的方法
2015/07/28 Python
python 字典访问的三种方法小结
2019/12/05 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
软件缺陷的分类都有哪些
2014/08/22 面试题
材料成型专业个人求职信范文
2013/09/25 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
大学生旷课检讨书
2014/01/22 职场文书
运动会通讯稿500字
2014/02/20 职场文书
青年文明号服务承诺
2014/03/31 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android