线程同步之Event
01.线程同步指通过某种技术,让一个线程访问某些数据时,其他线程不能访问这些数据,直到线程完成对数据的操作。
- 不同操作系统实现线程同步技术有所不同,具体分为:
- 临界区(critical section)。
- 互斥量(mutex)。
- 信号量(semaphore)。
- 事件(event)。
02.event事件:
- event事件是线程间通信机制中最简单的实现,使用一个内部的标记flag,通过flag的布尔值变化来进行操作。
- event类的方法包括:
- set(),标记设置为True。
- clear(),标记设置为False。
- is_set(),标记是否为True。
- wait(timeout=None),设置等待标记为True的时长,None为无限等待;等到了返回True,未等到返回False。
- event类的示例:
import threading
import time
import random
job = {'count': 0}
event = threading.Event()
flag = True
def worker(count=100):
global flag
print("I am working")
while flag:
time.sleep(random.uniform(0.05, 0.1))
job['count'] = job['count'] + 1
print("Jobs already done {}/100".format(job['count']))
if job['count'] >= count:
event.set()
break
def boss():
global flag
if event.wait(7):
print("Well Done")
else:
print("Its already 20 seconds, timeout!")
flag = False
w = threading.Thread(name='worker', target=worker, daemon=False)
b = threading.Thread(name='boss', target=boss, daemon=False)
w.start()
b.start()- Event.wait()方法会阻塞线程,直到标记被设置为True,或者等待的时间结束而被设置为False。
- Event.wait()方法优于time.sleep,它会更快的切换到其他线程,提高并发效率。
文档更新时间: 2021-10-04 00:19 作者:闻骏