Python queue隊列

做用:編程

   解耦:使程序直接實現鬆耦合,修改一個函數,不會有串聯關係。
   提升處理效率:FIFO = 現進先出,LIFO = 後入先出。
 
隊列:
  隊列能夠併發的派多個線程,對排列的線程處理,並切每一個須要處理線 程只須要將請求的數據放入隊列容器的內存中,線程不須要等待,當排列完 畢處理完數據後,線程在準時來取數據便可。請求數據的線程只與這個隊列 容器存在關係,處理數據的線程down掉不會影響到請求數據的線程,隊列 派給其餘線程處理這分數據,它實現瞭解耦,提升效率。 隊列內會有一個有 順序的容器,列表與這個容器是有區別的,列表中 據雖然是排列的,但數 據被取走後還會保留,而隊列中這個容器的數據 被取 後將不會保留。當必須在多個線程之間安全地交換信息時,隊列在線程編程中特別有用。
 
 
參數介紹:
# 先入先出 maxsize 可設置大小,設置block=False拋異常
class queue.Queue(maxsize=0)  

 # 後進先出 
class queue.LifoQueue(maxsize=0)

# 存儲數據時可設置優先級的隊列
# 優先級設置數越小等級越高
class queue.PriorityQueue(maxsize=0) 

# 放入數據
Queue.put(item, block=True, timeout=None)

# 取出數據 #沒有數據將會等待
Queue.get(block=True, timeout=None)

# 若是1秒後沒取到數據就退出
Queue.get(timeout = 1)


# 取數據,若是沒數據拋queue.Empty異常
Queue.get_nowait()

# 查看隊列大小
Queue.qsize()

# 返回True,若是空
Queue.empty() #return True if empty  

# 設置隊列大小
Queue.full() 

# 後續調用告訴隊列,任務的處理是完整的。
Queue.task_done()

 

生產者消費者模型:
import threading,time
import queue

# 最多存入10個
q = queue.Queue(maxsize=10)

def producer(name):
    count = 1
while True:
# 生產一塊骨頭 q.put("骨頭 %s" % count ) print("生產了骨頭",count) count +=1 time.sleep(0.3) def consumer(name): while True: print("%s 取到[%s] 而且吃了它" %(name, q.get())) time.sleep(1)   # 告知這個任務執行完了 q.task_done() # 生成線程 p = threading.Thread(target=producer,args=("德國骨科",)) c = threading.Thread(target=consumer,args=("陳狗二",)) d = threading.Thread(target=consumer,args=("呂特黑",)) # 執行線程 p.start() c.start() d.start()
相關文章
相關標籤/搜索