python多线程编程(6): 队列同步
生活随笔
收集整理的這篇文章主要介紹了
python多线程编程(6): 队列同步
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
From: http://www.cnblogs.com/holbrook/archive/2012/03/15/2398060.html
?
前面介紹了互斥鎖和條件變量解決線程間的同步問題,并使用條件變量同步機制解決了生產者與消費者問題。
讓我們考慮更復雜的一種場景:產品是各不相同的。這時只記錄一個數量就不夠了,還需要記錄每個產品的細節。很容易想到需要用一個容器將這些產品記錄下來。
Python的Queue模塊中提供了同步的、線程安全的隊列類,包括FIFO(先入先出)隊列Queue,LIFO(后入先出)隊列LifoQueue,和優先級隊列PriorityQueue。這些隊列都實現了鎖原語,能夠在多線程中直接使用??梢允褂藐犃衼韺崿F線程間的同步。
用FIFO隊列實現上述生產者與消費者問題的代碼如下:
#encoding=utf-8import 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()
總結
以上是生活随笔為你收集整理的python多线程编程(6): 队列同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: as3文本框的动态拖拽和编辑
- 下一篇: Python解析式