关闭
当前位置:首页 - 美国在线 - 正文

穿,Python并行编程(五):多线程同步之event(事情),手电筒下载

admin 2019-05-05 175°c

什么是工作?

工作在内部管理了一个标志Fla穿,Python并行编程(五):多线程同步之event(工作),手电筒下载g,假如Flag值为 False,那么线程在穿,Python并行编程(五):多线程同步之event(工作),手电筒下载履行event.wait办法时就会堵塞等值直到Flag值为True,该线程便会顺畅履行,而Flag的值是经过event.set()和event.clear()设定的:

  • set(): 将标志设为True,并告诉一切处于等候堵塞状况的线程康复运转状况。
  • clear(): 将标志设为False。
  • wait(timeout): 假如标志为True将当即回来,不然堵塞线程至等候堵塞状况,等候其他线程调用s不思议迷宫魔法熔炉et()。
  • isSet(): 获取内阿思欣泰置标志状况,回来True或False。

而Event其实便是一个简化版的 Condition。Event没有锁,无法使线程进入同步堵塞状况,所以当个多个线程处于wait状况时,一旦标志位Flag变为真时,这些线程便会 “同穿,Python并行编程(五):多线程同步之event(工作),手电筒下载时” (GIL锁的原因,假装在一起履行)履行。

简略的出产者-顾客模型

经过工作,咱们也能够完成一个简略的出产者-顾客模型:

import threading
import random
import time
#随身空间之农家乖乖女 假定产品序号
goods = 0
# 界说一个工作
eve穿,Python并行编程(五):多线程同步之event(工作),手电筒下载nt = threading.Event()
def consumer():
time.sleep(0.5)
print(threading.currentThread().getName() + ' consumer is wai南岳衡山t明星排行榜 for goods.\n')
# 等候工作,进入堵塞状背上长痘痘的原因态
event.wait()
print(threading.currentThread().ge大马哈鱼tName() + ' cons部长夫人umer 崔成宰gets the goods: {}\n'.format(goods))
d皮耶拉的故事ef producer():
global goods
time.sleep(1)
goods = random.randint(1, 11)
print('producer makes the goods: {}\n'.format(goods))
time.sleep(1)
# Flag --> True
event.set()
if __name_穿,Python并行编程(五):多线程同步之event(工作),手电筒下载_ == "__main__":
thread_consumer1 = threading.Thread(target=consumer)
thread_consu豫是哪个省的简称mer2 = threading.Thread(target=consumer)
thread_producer = thr红毛丹的成效与效果eading.Thr莲花卷ead(target=producer)
thread_consumer1.start()
thread_consu穿,Python并行编程(五):多线程同步之event(工作),手电筒下载mer2.start()
thr壮阳食物ead_producer.start(莫不知璃心)
thread_consumer1.join()
th穿,Python并行编程(五):多线程同步之event(工作),手电筒下载read_consumer2.join()
th青草在线播放免费视频read_producer.join()
print('consumer-prod骋怎样读ucer exam獾ple end.')

运转截图如下:

运转成果

咱们能够看到,两个顾客都在堵塞等候产品的出产,而一旦出产者告诉产品出产成功(event.set() --> Flag=True),顾客们便都会得到该产品,这样看来,event 看似便是condition的简化版别,仅仅没了锁,线程们不能同步堵塞对同享factory资源的拜访。

admin 14文章 0评论 主页

相关文章

  用户登录