# _*_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()