日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的生产者与消费者模式

發布時間:2024/7/5 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的生产者与消费者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Queue的說明

?

  • 對于Queue,在多線程通信之間扮演重要的角色
  • 添加數據到隊列中,使用put()方法
  • 從隊列中取數據,使用get()方法
  • 判斷隊列中是否還有數據,使用qsize()方法
  • ?

    生產者消費者模式的說明

    ?

    為什么要使用生產者和消費者模式

    ?

    在線程世界里,生產者就是生產數據的線程,消費者就是消費數據的線程。在多線程開發當中,如果生產者處理速度很快,而消費者處理速度很慢,那么生產者就必須等待消費者處理完,才能繼續生產數據。同樣的道理,如果消費者的處理能力大于生產者,那么消費者就必須等待生產者。為了解決這個問題于是引入了生產者和消費者模式。

    ?

    什么是生產者消費者模式

    ?

    生產者消費者模式是通過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞隊列來進行通訊,所以生產者生產完數據之后不用等待消費者處理,直接扔給阻塞隊列,消費者不找生產者要數據,而是直接從阻塞隊列里取,阻塞隊列就相當于一個緩沖區,平衡了生產者和消費者的處理能力。

    ?

    這個阻塞隊列就是用來給生產者和消費者解耦的??v觀大多數設計模式,都會找一個第三者出來進行解耦。

    ?

    例如:

    from threading import Thread

    import queue

    ?

    importtime

    ?

    q = queue.Queue()?# 創建一個隊列容器,用來保存生產者產生的數據

    ?

    ?

    classProducer(Thread):

    ???"""生產者線程"""

    ??? def run(self):

    ??????? count = 0

    ??????? while True:

    ??????????? if q.qsize() < 50:

    ??????????????? for i in range(3):

    ??????????????????? count += 1

    ??????????????????? msg = "產品 %d" % count

    ??????????????????? q.put(msg)

    ??????????????????? print("生產者%s 生產了一個數據 %s" % (self.name, msg))

    ??????????? time.sleep(1)

    ?

    ?

    classCustomer(Thread):

    ???"""消費者線程"""

    ??? def run(self):

    ??????? while True:

    ??????????? if q.qsize() > 20:

    ??????????????? for i in range(2):

    ??????????????????? msg = q.get()

    ??????????????????? print("消費者%s 消費了一個數據 %s" % (self.name, msg))

    ??????????? time.sleep(1)

    ?

    ?

    fori in range(3):

    ??? p = Producer()

    ??? p.start()

    ?

    fori in range(5):

    ??? c = Customer()

    ??? c.start()

    ?

    總結

    以上是生活随笔為你收集整理的python中的生产者与消费者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。