Python threading中event的使用
通过threading.Event()可以创建一个事件管理标志,该标志(event)默认为False,event对象主要有四种方法可以调用:
event.wait(timeout=None):调用该方法的线程会被阻塞,如果设置了timeout参数,超时后,线程会停止阻塞继续执行;
event.set():将event的标志设置为True,调用wait方法的所有线程将被唤醒;
event.clear():将event的标志设置为False,调用wait方法的所有线程将被阻塞;
event.isSet():判断event的标志是否为True。
下面通过一个例子来说明:
# encoding=utf8import threading
from time import sleepdef test(n, event):while not event.isSet():print 'Thread %s is ready' % nsleep(1)event.wait()while event.isSet():print 'Thread %s is running' % nsleep(1)def main():event = threading.Event()for i in xrange(0, 2):th = threading.Thread(target=test, args=(i, event))th.start()sleep(3)print '----- event is set -----'event.set()sleep(3)print '----- event is clear -----'event.clear()if __name__ == '__main__':main()
运行结果如下:
Thread 0 is ready
Thread 1 is ready
Thread 1 is ready
Thread 0 is ready
Thread 1 is readyThread 0 is readyThread 0 is readyThread 1 is ready----- event is set -----
Thread 1 is running
Thread 0 is running
Thread 0 is running
Thread 1 is running
Thread 0 is runningThread 1 is running----- event is clear -----
代码解读:
首先创建了两个子线程,并通过主线程的event对象来控制子线程什么时候开始执行(使用event.wait()方法阻塞子线程)。通过结果可以看出,在主线程sleep 3秒期间(主线程event.set()之前,此时event.isSet()为False),每个子线程都是在打印“...is ready”,并没有继续执行后面的代码。
接着,主线程调用了event.set()后,event的标志为True,此时event.isSet()为True,所以每个线程开始打印“...is running”。
最后,主线程又sleep 3秒后,主线程调用event.clear()方法使event的标志又变成了False,所以在主线程打印“event is clear”后,其它子线程不再打印“...is running”并退出,整个程序也结束运行。
下面再说一下event.wait(timeout)中timeout的用法,不使用timeout的时候:
# encoding=utf8import threadingdef test1(n, event):print 'Thread %s is ready' % nevent.wait()print 'Thread %s is running' % ndef main():event = threading.Event()for i in xrange(0, 2):th = threading.Thread(target=test1, args=(i, event))th.start()if __name__ == '__main__':main()
运行结果:
Thread 0 is ready
Thread 1 is ready
此时如果不手动停止程序,两个子线程将一直处于阻塞状态,永远不会打印后面的“... is running”。
下面加上timeout参数:
Thread 0 is ready
Thread 1 is ready
Thread 0 is runningThread 1 is running
此时可以看到,两个线程分别阻塞了1秒后继续执行了后面的代码,没有等待主线程的event标志变成True。
Python threading中event的使用相关推荐
- python threading中的join和setDaemon方法
python 多线程的threading中的join和setDaemon方法 join():通俗的将就是阻止子线程随着主线程的结束而结束 setDaemon():设置子线程是否随着主线程的结束而结束, ...
- python中event的用法_Python编程之event对象的用法实例分析
本文实例讲述了Python编程中event对象的用法.分享给大家供大家参考,具体如下: Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位为假,则线程等待直到信号 ...
- python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解
看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...
- python主线程和子线程_python 在threading中如何处理主进程和子线程的关系
之前用python的多线程,总是处理不好进程和线程之间的关系.后来发现了join和setDaemon函数,才终于弄明白.下面总结一下. 1.使用join函数后,主进程会在调用join的地方等待子线程结 ...
- python threading模块中的timer_threading中定时器Timer方法
threading中定时器Timer 定时器功能:在设置的多少时间后执行任务,不影响当前任务的执行 常用方法 from threading import Timer t = Timer(interva ...
- Python学习笔记- Python threading模块
Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import timede ...
- 同步锁 php,python线程中同步锁详解
这篇文章主要为大家详细介绍了python线程中同步锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十 ...
- Python 线程事件 Event - Python零基础入门教程
目录 一.Python 线程事件 Event 函数介绍 二.Python 线程事件 Event 原理 三.Python 线程事件 Event 使用 四.重点总结 五.猜你喜欢 零基础 Python 学 ...
- 一文搞懂python threading(多线程)模块
命令提示符如何打开并运行python文件链接 一. 1.active_count() , activeConut() 方法 功能 active_count() , activeConut() 返回处于 ...
最新文章
- Python3 调试技巧 —— 死循环
- c3p0对mysql配置_c3p0的常用配置方式
- [Android Traffic] 使用缓存来避免重复的下载
- 利用std::allocator实现自定义的vector类
- 文本挖掘(part6)--共现矩阵
- python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...
- 在SAE搭建微信公众账号服务
- 软件测试流程-全程软件测试【全思维导图】最新总结
- 超简单的HIDPI设置
- Adobe将支持HTTP流媒体直播 预示着ipad将可以用flash吗?
- springMvc中的校验框架@valid和@validated
- 夏日汽车保养 雨季汽车保养
- R语言 dataframe 取指定行列filter 随机取数
- 25 岁,毕业写前端的这三年
- Hibernate学习记录
- 好用的在线二维码生成器网站PHP源码
- /*CDATA*/介绍
- SQL Server 2019 开启数据库远程访问
- 《第一行代码》 第一章:第一行Android代码
- ubuntu20.04 使用 rplidar A2过程记录
热门文章
- 自动化注入工具SQLmap入侵数据库的使用方法(注入攻击)
- c语言tchar头文件,c – 什么是TCHAR字符串和Win32 API函数的“A...
- 我的路.........还很长
- IT行业就业前景光明
- ICT界的“巅峰对决”巾帼不让须眉
- Java实现 LeetCode 79 单词搜索
- python线程进程_python 线程进程
- 吞食天地2完全版乱码怎么解决_2人争吵了情绪很不好怎么解决
- radio取消选中并能再次选中
- python开发app需要多久_python数据库开发app