• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 26次浏览 已收录 0个评论

本篇文章主要介绍了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线程

# coding:utf-8import threadingimport timeevent = 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 已经启动本文来源gao@!dai!ma.com搞$$代^@码!网
小伙伴 b 已经进入就餐状态!
主线程通知小伙伴开吃咯!
Thread-1 收到通知了.
小伙伴 a 开始吃咯!
Thread-2 收到通知了.
小伙伴 b 开始吃咯!

Event案例2

场景:当小伙伴a,b,c集结完毕后,请客的人发话:开吃咯!

# coding:utf-8import threadingimport timeevent = 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 小伙伴 %s 开始吃咯!'%(time.time(), name)class myThread (threading.Thread):  # 继承父类threading.Thread  def __init__(self, name):    '''重写threading.Thread初始化内容'''    threading.Thread.__init__(self)    self.people = name  def run(self):  # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数    '''重写run方法'''    chiHuoGuo(self.people)   # 执行任务    print("qq交流群:226296743")    print("结束线程: %s" % threading.currentThread().getName())# 设置线程组threads = []# 创建新线程thread1 = myThread("a")thread2 = myThread("b")thread3 = myThread("c")# 添加到线程组threads.append(thread1)threads.append(thread2)threads.append(thread3)# 开启线程for thread in threads:  thread.start()time.sleep(0.1)# 发送事件通知print '集合完毕,人员到齐了,开吃咯!'event.set()

运行结果:

Thread-1 已经启动
小伙伴 a 已经进入就餐状态!
Thread-2 已经启动
小伙伴 b 已经进入就餐状态!
Thread-3 已经启动
小伙伴 c 已经进入就餐状态!
集合完毕,人员到齐了,开吃咯!
Thread-1 收到通知了.
1516780957.47 小伙伴 a 开始吃咯!
qq交流群:226296743
结束线程: Thread-1
Thread-3 收到通知了.
1516780957.47 小伙伴 c 开始吃咯!Thread-2 收到通知了.
qq交流群:226296743

1516780957.47 小伙伴 b 开始吃咯!结束线程: Thread-3

qq交流群:226296743
结束线程: Thread-2

相关推荐:

python线程池threadpool的实现

以上就是python多线程之事件Event的使用详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python多线程之事件Event的使用详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址