python 多執行緒實現生產者與消費者模型

艾利金德發表於2018-04-14

# 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()
複製程式碼


相關文章