python 生產者與消費者模式

來源:互聯網
上載者:User

標籤:post   reading   重要   分享   完數   多線程通訊   通訊   size   main   

生產者與消費者模式1. 隊列

先進先出

2. 棧

先進後出

Python的Queue模組中提供了同步的、安全執行緒的隊列類,包括FIFO(先入先出)隊列Queue,LIFO(後入先出)隊列LifoQueue,和優先順序隊列PriorityQueue。這些隊列都實現了鎖原語(可以理解為原子操作,即要麼不做,要麼就做完),能夠在多線程中直接使用。可以使用隊列來實現線程間的同步。

用FIFO隊列實現上述生產者與消費者問題的代碼如下:

import threadingimport timefrom queue import Queueclass Producer(threading.Thread):    def run(self):        global queue        count = 0        while True:            if queue.qsize() < 1000:                for i in range(100):                    count = count +1                    msg = ‘產生產品‘+str(count)                    queue.put(msg)                    print(msg)            time.sleep(0.5)class Consumer(threading.Thread):    def run(self):        global queue        while True:            if queue.qsize() > 100:                for i in range(3):                    msg = self.name + ‘消費了 ‘+queue.get()                    print(msg)            time.sleep(1)if __name__ == ‘__main__‘:    queue = Queue()    for i in range(500):        queue.put(‘初始產品‘+str(i))    for i in range(2):        p = Producer()        p.start()    for i in range(5):        c = Consumer()        c.start()
3. Queue的說明
  1. 對於Queue,在多線程通訊之間扮演重要的角色
  2. 添加資料到隊列中,使用put()方法
  3. 從隊列中取資料,使用get()方法
  4. 判斷隊列中是否還有資料,使用qsize()方法
4. 生產者消費者模式的說明
  • 為什麼要使用生產者和消費者模式

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

  • 什麼是生產者消費者模式

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

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

python 生產者與消費者模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.