# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
#一个生产者一个消费者
import time
import queue
import threading
import random
class Producer(threading.Thread):
"""
只负责产生数据
"""
FINISHED = True
def __init__(self, name, queue):
super().__init__(name=name)
self.queue = queue
def run(self):
for i in range(10):
print("{}正在生产产品{}到队列;".format(self.getName(), i))
self.queue.put(i)
time.sleep(random.randint(1, 10) * 0.1)
# 设置完成的标志位
self.queue.put(self.FINISHED)
print("{}完成".format(self.getName()))
class Consumer(threading.Thread):
"""
数据处理,
写入到数据库里面
"""
FINISHED = True
def __init__(self, name, queue):
super().__init__(name=name)
self.queue = queue
def run(self):
while True:
value = self.queue.get()
# 用来退出线程
if value is self.FINISHED:
break
print("{}正在消费产品,商品{}在队列里已被消费".format(self.getName(), value))
print("{}完成".format(self.getName()))
if __name__ == '__main__':
queue = queue.Queue()
producer = Producer('生产者', queue)
consumer = Consumer('消费者', queue)
producer.start()
consumer.start()
#下面的作用是主线程执行到这里等待,执行完子线程之后再执行最后面的。
consumer.join()
producer.join()
print('所有线程已完成')