import queue
q1 = queue.queue()
q1.put(1)
q1.put(2)
q1.put(3)
print(q1.get())
print(q1.get())
print(q1.get())
# 1 2 3
import queue
q2 = queue.lifoqueue()
q2.put(1)
q2.put(2)
q2.put(3)
print(q2.get())
print(q2.get())
print(q2.get())
# 3 2 1
import queue
q3 = queue.priorityqueue()
q3.put((10, 1))
q3.put((9, 2))
q3.put((8, 3))
print(q3.get())
print(q3.get())
print(q3.get())
# (8, 3) (9, 2) (10, 1)
在併發程式設計中使用生產者和消費者模式能夠解決絕大多數併發問題。
該模式通過平衡生產線程和消費執行緒的工作能力來提高程式的整體處理資料的速度。
為什麼要使用生產者和消費者模式
什麼是生產者消費者模式
生產者消費者模式是通過乙個容器來解決生產者和消費者的強耦合問題。
生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,
所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,
消費者不找生產者要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,
平衡了生產者和消費者的處理能力。
import queue, threading, time
q = queue.queue(maxsize=10)
defproducer
(name):
count = 0
while
true:
count += 1
q.put("包子 %s" % count)
print("%s 生產了乙個包子" % name)
time.sleep(2)
defconsumer
(name):
while
true:
print("%s 得到了 %s" % (name, q.get()))
p1 = threading.thread(target=producer, args=("生產者1",))
c1 = threading.thread(target=consumer, args=("消費者1",))
c2 = threading.thread(target=consumer, args=("消費者2",))
p1.start()
c1.start()
c2.start()
import queue, threading, time
q = queue.queue()
defproducer
(name):
for i in range(5):
q.put("包子 %s" % i)
print("等待取走")
q.join() # 等待通知,全部取走則繼續
print("全都取走了")
defconsumer
(name):
while q.qsize() > 0:
print("%s 得到了 %s" % (name, q.get()))
q.task_done() # 告知一次任務結束
p1 = threading.thread(target=producer, args=("生產者1",))
p1.start()
c = consumer("消費者")
"""等待取走
消費者 得到了 包子 0
消費者 得到了 包子 1
消費者 得到了 包子 2
消費者 得到了 包子 3
消費者 得到了 包子 4
全都取走了
"""
python網路程式設計之執行緒佇列 queue
首先來看乙個示例 import threading import time li 1,2,3,4,5 defpri while li a li 1 print a time.sleep 1 try li.remove a except exception as e print a,e t1 thre...
Python網路程式設計之執行緒佇列 queue
python3.5中,佇列是執行緒間最常用的交換資料的形式。queue模組是提供佇列操作的模組,雖然簡單易用,但是不小心的話,還是會出現一些意外。import queue q queue.queue maxsize 10 queue.queue類即是乙個佇列的同步實現。佇列長度可為無限或者有限。可通...
python訊息佇列Queue
例項1 訊息佇列queue,不要將檔案命名為 queue.py 否則會報異常 importerror cannot import name queue coding utf 8 from multiprocessing import queue q queue 3 初始化乙個queue物件,最多可接...