# _*_coding:utf-8_*_ # author:leo # date: # email:alplf123@163.com import queue, threading class Worker(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.lock = threading.Lock() self.con1 = threading.Condition(self.lock) self.con2 = threading.Condition(self.lock) self.event = threading.Event()# 也可以达到类似的效果,但是不够灵活,运用的场景不够丰富,此类也是线程安全 self.queque = queue.Queue() print(self.event.is_set()) def run(self): threading.Thread(target=self.customer).start() threading.Thread(target=self.producter).start() def producter(self): with self.con1: for a in range(100): print('productor put:', str(a)) self.queque.put(a) self.con2.notify() self.con1.wait() #使用wait 必须保证当前是安全的 必须得到锁 print('recevie sigal from con1 producting...') self.con2.notify_all() def customer(self): with self.con2: while True: self.con2.wait() print('recevie signal from con2 customer....') if self.queque.empty(): break result = self.queque.get() if result is not None: print('customer get:', str(result)) self.con1.notify() t = Worker() t.start() t.join()