python多線程編程(5): 隊列同步

來源:互聯網
上載者:User

標籤:

前面介紹了互斥鎖和條件變數解決線程間的同步問題,並使用條件變數同步機制解決了生產者與消費者問題。

讓我們考慮更複雜的一種情境:產品是各不相同的。這時只記錄一個數量就不夠了,還需要記錄每個產品的細節。很容易想到需要用一個容器將這些產品記錄下來。

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

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

#encoding=utf-8import threadingimport timefrom Queue import Queueclass Producer(threading.Thread):    def run(self):        global queue        count = 0        while True:            for i in range(100):                if queue.qsize() > 1000:                     pass                else:                     count = count +1                     msg = ‘產生產品‘+str(count)                     queue.put(msg)                     print msg            time.sleep(1)class Consumer(threading.Thread):    def run(self):        global queue        while True:            for i in range(3):                if queue.qsize() < 100:                    pass                else:                    msg = self.name + ‘消費了 ‘+queue.get()                    print msg            time.sleep(1)queue = Queue()def test():    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()if __name__ == ‘__main__‘:    test()

 

python多線程編程(5): 隊列同步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.