Python并行编程(七):线程同步之事件

1、基本概念

事件是线程之间用于通讯的对象。有的线程等待信号,有的线程发出信号。基本上事件对象都会维护一个内部变量,可以通过set方法设置为true,也可以通过clear方法设置为false。wait方法将会阻塞线程,直到内部变量为true。

2、使用用例

# coding : utf-8

import time
from threading import Thread, Event
import random items = []
event = Event() class consumer(Thread):
def __init__(self, items, event):
Thread.__init__(self)
self.items = items
self.event = event def run(self):
while True:
time.sleep(2)
print("Cosumer is waiting...")
self.event.wait()
item = self.items.pop()
print("Consumer notify: %d popped from list by %s" %(item, self.name)) class producer(Thread):
def __init__(self, integers, event):
Thread.__init__(self)
self.items = items
self.event = event def run(self):
global item
for i in range(100):
time.sleep(2)
item = random.randint(0, 256)
self.items.append(item)
print('Producer notify : item N° %d appended to list by %s' % (item, self.name))
print('Producer notify : event set by %s' % self.name)
self.event.set()
print('Produce notify : event cleared by %s '% self.name)
self.event.clear()
if __name__ == '__main__':
t1 = producer(items, event)
t2 = consumer(items, event)
t2.start()
t1.start()
t2.join()
t1.join()

线程t1在list最后添加值,然后设置event来通知消费者,消费者通过wait阻塞,直到收到信号的时候从list中取出元素消费。

producer类初始化时定义了item的list和Event,与条件对象的例子不同,这里的list不是全局的。而是通过参数传入的。

在run方法中,每当item创建,producer类将新item添加到list末尾然后发出事件通知。

consumer类初始化时也定义了item的list和Event()。当item进来的时候,它将其取出。

工作流程如图:

Python并行编程(七):线程同步之事件

上一篇:微信小程序 - IOS 仿饿了么"我的",下拉橡皮筋效果


下一篇:二维线性表 list实现