python多線程(隊列同步)

當多個線程須要共享數據或者資源的時候,可能會使得線程的使用變得複雜。線程模塊提供了許多同步原語,包括信號量、條件變量、事件和鎖。當這些選項存在時,最佳實踐是轉而關注於使用隊列。相比較而言,隊列更容易處理,而且可使得線程編程更加安全,由於它們可以有效地傳送單個線程對資源的全部訪問,並支持更加清晰的、可讀性更強的設計模式。 python

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

用FIFO隊列實現上述生產者與消費者問題的代碼以下: 設計模式

#encoding=utf-8
import threading
import time
from Queue import Queue

class 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()
相關文章
相關標籤/搜索