python 多线程实现生产者与消费者模型

616 阅读1分钟

# coding=utf-8
from queue import Queue
import threading,time


class Duo(object):
    """生产者与消费者模型"""
    def __init__(self, num):
        # 创建队列
        self.queue = Queue()
        self.num = num

    def put_num(self):

        for i in range(self.num):
            # 添加数据
            self.queue.put(i)

    def get_num(self):
        while True:
            # 获取数据
            q = self.queue.get()
            print(q)
            time.sleep(1)
            # 宣告子线程结束
            self.queue.task_done()

    def run(self):
        # 创建子线程
        t1 = threading.Thread(target=self.put_num, daemon=True)
        t2 = threading.Thread(target=self.get_num, daemon=True)
        # 设置子线程线程守护,即主线程结束,
        # 子线程结束和 daemon一个意思,
        # 必须设置线程守护之后才能启动子线程
        # t1.setDaemon(True)
        # t2.setDaemon(True)
        # 开启线程
        t1.start()
        t2.start()
        # 设置主线程结束的条件
        self.queue.join()

if __name__ == '__main__':

    t = Duo(10)
    t.run()