通过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的使用相关推荐

  1. python threading中的join和setDaemon方法

    python 多线程的threading中的join和setDaemon方法 join():通俗的将就是阻止子线程随着主线程的结束而结束 setDaemon():设置子线程是否随着主线程的结束而结束, ...

  2. python中event的用法_Python编程之event对象的用法实例分析

    本文实例讲述了Python编程中event对象的用法.分享给大家供大家参考,具体如下: Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位为假,则线程等待直到信号 ...

  3. python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解

    看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...

  4. python主线程和子线程_python 在threading中如何处理主进程和子线程的关系

    之前用python的多线程,总是处理不好进程和线程之间的关系.后来发现了join和setDaemon函数,才终于弄明白.下面总结一下. 1.使用join函数后,主进程会在调用join的地方等待子线程结 ...

  5. python threading模块中的timer_threading中定时器Timer方法

    threading中定时器Timer 定时器功能:在设置的多少时间后执行任务,不影响当前任务的执行 常用方法 from threading import Timer t = Timer(interva ...

  6. Python学习笔记- Python threading模块

    Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import timede ...

  7. 同步锁 php,python线程中同步锁详解

    这篇文章主要为大家详细介绍了python线程中同步锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十 ...

  8. Python 线程事件 Event - Python零基础入门教程

    目录 一.Python 线程事件 Event 函数介绍 二.Python 线程事件 Event 原理 三.Python 线程事件 Event 使用 四.重点总结 五.猜你喜欢 零基础 Python 学 ...

  9. 一文搞懂python threading(多线程)模块

    命令提示符如何打开并运行python文件链接 一. 1.active_count() , activeConut() 方法 功能 active_count() , activeConut() 返回处于 ...

最新文章

  1. Python3 调试技巧 —— 死循环
  2. c3p0对mysql配置_c3p0的常用配置方式
  3. [Android Traffic] 使用缓存来避免重复的下载
  4. 利用std::allocator实现自定义的vector类
  5. 文本挖掘(part6)--共现矩阵
  6. python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...
  7. 在SAE搭建微信公众账号服务
  8. 软件测试流程-全程软件测试【全思维导图】最新总结
  9. 超简单的HIDPI设置
  10. Adobe将支持HTTP流媒体直播 预示着ipad将可以用flash吗?
  11. springMvc中的校验框架@valid和@validated
  12. 夏日汽车保养 雨季汽车保养
  13. R语言 dataframe 取指定行列filter 随机取数
  14. 25 岁,毕业写前端的这三年
  15. Hibernate学习记录
  16. 好用的在线二维码生成器网站PHP源码
  17. /*CDATA*/介绍
  18. SQL Server 2019 开启数据库远程访问
  19. 《第一行代码》 第一章:第一行Android代码
  20. ubuntu20.04 使用 rplidar A2过程记录

热门文章

  1. 自动化注入工具SQLmap入侵数据库的使用方法(注入攻击)
  2. c语言tchar头文件,c – 什么是TCHAR字符串和Win32 API函数的“A...
  3. 我的路.........还很长
  4. IT行业就业前景光明
  5. ICT界的“巅峰对决”巾帼不让须眉
  6. Java实现 LeetCode 79 单词搜索
  7. python线程进程_python 线程进程
  8. 吞食天地2完全版乱码怎么解决_2人争吵了情绪很不好怎么解决
  9. radio取消选中并能再次选中
  10. python开发app需要多久_python数据库开发app