python多线程之事件Event的使用详解


本文摘自php中文网,作者不言,侵删。

本篇文章主要介绍了python多线程之事件Event的使用详解,现在分享给大家,也给大家做个参考。一起过来看看吧

前言

小伙伴a,b,c围着吃火锅,当菜上齐了,请客的主人说:开吃!,于是小伙伴一起动筷子,这种场景如何实现

Event(事件)

Event(事件):事件处理的机制:全局定义了一个内置标志Flag,如果Flag值为 False,那么当程序执行 event.wait方法时就会阻塞,如果Flag值为True,那么event.wait 方法时便不再阻塞。

Event其实就是一个简化版的 Condition。Event没有锁,无法使线程进入同步阻塞状态。

Event()

  1. set(): 将标志设为True,并通知所有处于等待阻塞状态的线程恢复运行状态。

  2. clear(): 将标志设为False。

  3. wait(timeout): 如果标志为True将立即返回,否则阻塞线程至等待阻塞状态,等待其他线程调用set()。

  4. isSet(): 获取内置标志状态,返回True或False。

Event案例1

场景:小伙伴a和b准备就绪,当收到通知event.set()的时候,会执行a和b线程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

# coding:utf-8

 

import threading

import time

 

event = threading.Event()

 

 

def chihuoguo(name):

  # 等待事件,进入等待阻塞状态

  print '%s 已经启动' % threading.currentThread().getName()

  print '小伙伴 %s 已经进入就餐状态!'%name

  time.sleep(1)

  event.wait()

  # 收到事件后进入运行状态

  print '%s 收到通知了.' % threading.currentThread().getName()

  print '小伙伴 %s 开始吃咯!'%name

 

# 设置线程组

threads = []

 

# 创建新线程

thread1 = threading.Thread(target=chihuoguo, args=("a", ))

thread2 = threading.Thread(target=chihuoguo, args=("b", ))

 

# 添加到线程组

threads.append(thread1)

threads.append(thread2)

 

# 开启线程

for thread in threads:

  thread.start()

 

time.sleep(0.1)

# 发送事件通知

print '主线程通知小伙伴开吃咯!'

event.set()

运行结果:

Thread-1 已经启动
小伙伴 a 已经进入就餐状态!
Thread-2 已经启动
小伙伴 b 已经进入就餐状态!
主线程通知小伙伴开吃咯!
Thread-1 收到通知了.
小伙伴 a 开始吃咯!
Thread-2 收到通知了.
小伙伴 b 开始吃咯!

Event案例2

阅读剩余部分

相关阅读 >>

Python中使用三种方法判断文件或文件夹是否存在的实例分享

Python文件和流相关知识介绍

Python基础 装饰器及练习

如何使用Python线程锁(实例解析)

Python如何获取当前所在目录

如何在shell脚本中检查Python版本?

Python需要学linux吗

Python下json和pickle的用法介绍(附代码)

Python中关于类与实例如何绑定属性与方法的代码实例

Python如何实现单例模式

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...