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的字节编译详解
Sep 20 Python
python遍历序列enumerate函数浅析
Oct 17 Python
Python搜索引擎实现原理和方法
Nov 27 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
解析Python的缩进规则的使用
Jan 16 Python
Python骚操作之动态定义函数
Mar 26 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
Python为何不支持switch语句原理详解
Oct 21 Python
Pycharm Plugins加载失败问题解决方案
Nov 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 使用GD库为页面增加水印示例代码
2014/03/24 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
二级域名转向类
2006/11/09 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
在MAC上搭建python数据分析开发环境
2016/01/26 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
货代行业个人求职简历的自我评价
2013/10/22 职场文书
认识深刻的检讨书
2014/02/16 职场文书
最美家庭活动方案
2014/08/31 职场文书
节约用电倡议书
2015/04/28 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
详细总结Python常见的安全问题
2021/05/21 Python
Nginx四层负载均衡的配置指南
2021/06/11 Servers