本帖最后由 SixPy 于 2017-6-8 12:36 编辑
生产者、消费者 模式import threading
import queue
import random as r
class 消费者(threading.Thread):
def __init__(self, queue, lock, name=''):
threading.Thread.__init__(self)
self._queue = queue
self.lock = lock
self.name = name
def run(self):
while 1:
msg = self._queue.get()
if isinstance(msg, str) and msg == 'quit':
break
with self.lock:
print("线程:%s,数据:%s" % (self.name, msg))
with self.lock:
print("线程:%s 结束!" % self.name)
def 生产者():
lck = threading.Lock() # 锁,用于同步 print()输出。
quels = [queue.Queue() for i in range(3)]# 数据队列
workers = [消费者(quels[n], lck, n) for n in range(3)]
for w in workers:
w.start() # 开启消费者线程
for i in range(2000):#大循环
for q in quels:
q.queue.clear()#三个队列,每次循环开始时清空
for each in range(100):#小循环
x=r.randint(i+30,i+60)+each#涉及到大、小循环变量的几个函数,这里用random示意
y=r.randint(i+60,i+120)+each
z=r.randint(i+60,i+180)+each
res=2.5*x-y-z
if res>=50:
quels[0].put(each) # 数据压入队列,给消费线程使用
if -50<res<50:
quels[1].put(each)
if res<=-50:
quels[2].put(each)
for q in quels:
q.put('quit') # 线程退出消息
for w in workers:
w.join() # 等待消费者线程结束
生产者()
|