一. 生產者/
消費者模式
概念:生產者產生一塊資料,放到buffer
中,與此同時,消費者在從buffer中取出並消耗這些資料
理解:像生活中廠家生產出產品,顧客購買消耗這些產品,buffer就是存放商品的倉庫。
二.生產者/消費者模式在python中的實現
簡單介紹:python中,佇列是執行緒間最常用的交換資料的形式之一。queue模組是python中提供佇列操作的模組。
原理:它建立乙個"佇列"物件(即用於存放資料的buffer), 然後不斷產生資料並存入該"佇列",同時也在不斷
地從該佇列中取出資料。
具體函式:
(1)建立乙個佇列物件
1 >>> import注:佇列長度可為無限或有限。可通過queue的建構函式的可選引數maxsize來設定佇列長度。若maxsize小於1則表示佇列長度無限,例:queue
2 >>> q = queue.queue()
(2)向佇列中存入資料
方法:q.put(item, block=true, timeout=none)
>>> q.put('a')
注:put()有兩個引數,第乙個item為必需的,為插入專案的值;第二個block為可選引數,預設為1。
如果佇列當前為空且block為1,put()方法就使呼叫執行緒暫停,直到空出乙個資料單元。如果block為0,put方法將引發full異常。
(3)從佇列中取出資料
方法:q.get(block=true, timeout=none)
>>> q.get()注:get方法可選引數為block,預設為true。
如果隊列為空且block為true,get()就使呼叫執行緒暫停,直至有專案可用。如果隊列為空且block為false,佇列將引發empty異常。
queue.queue中常用方法:
q.qsize() 返回佇列的大小例項測試:q.empty() 如果隊列為空,返回true,反之false
q.full() 如果佇列已滿,返回true,反之false。與 maxsize 大小對應
q.get([block[, timeout]]) 獲取佇列,timeout等待時間
q.get_nowait() 相當q.get(false) 非阻塞
q.put(item,timeout) 寫入佇列,timeout等待時間
q.put_nowait(item) 相當q.put(item, false)
q.task_done() 完成一項工作之後, 函式向任務已經完成的佇列傳送乙個訊號
q.join() 表示等到隊列為空,再執行別的操作
#執行結果:!/usr/bin/env python
#coding=utf-8
import
threading, time
import queue #
匯入訊息佇列模組
import random #
匯入隨機數模組,是為了模擬生產者與消費者速度不一致的情形q = queue.queue()#
例項化乙個佇列物件,當有多個執行緒共享乙個東西的時候就可以用它了
def producer(): #
生產者函式
for i in range(20):q.put(i)
#將結果放入訊息佇列中
'[+] product %s
' %i
time.sleep(random.randrange(3)) #
生產者的生產速度,3s內
def consumer(): #
消費者函式
count =0
while count < 20:data= q.get()#
取用訊息佇列中存放的結果
'[-] consume %s
' %data
count += 1time.sleep(random.randrange(4)) #
消費者的消費速度,4s內
producter = threading.thread(target =producer)
consumer = threading.thread(target =consumer)
producter.start()
consumer.start()
並行模式之生產者消費者
生產者 消費者模式是乙個經典的多執行緒設計模式,它為多執行緒的協作提供了良好的解決方案。在生產者 消費者模式中,通常有兩類執行緒,即若干個生產者執行緒和若干個消費者執行緒。生產者執行緒負責提交使用者請求,消費者執行緒負責處理使用者請求。生產者和消費者之間通過共享記憶體緩衝區進行通訊。生產者和消費者分...
Python之Queue模組以及生產消費者模型
佇列類似於一條管道,元素先進先出,進put arg 取get 有一點需要注意的是 佇列都是在記憶體中操作,程序退出,佇列清空,另外,佇列也是乙個阻塞的形態.佇列有很多中,但都依賴模組queue 佇列方式 特點 queue.queue 先進先出佇列 queue.lifoqueue 後進先出佇列 que...
Python多工 並行 併發
1.什麼是 多工 呢?簡單地說,就是作業系統可以同時執行多個任務 在 裡面,就是乙個程式有多個地方同時執行 打個比方,你一邊用著這瀏覽器上網,一邊在聽 一邊在用word趕作業,這就是多工 2.單核cpu是怎麼解決多工的?單核 意味著同一時刻只能執行一件事情 作業系統輪流讓各任務交替執行,任務1執行0...