當程式訪問速度不一致時,我們會用到生產者與消費者模式,在生產者與消費者之間搭建乙個緩衝池,先讀資料存入緩衝池,接著從緩衝池中讀取資料,這個模式最重要的應用還是解耦,幫助模組之間降低耦合,我們知道程式設計高內聚低耦合最好,生產者與消費者模式很好的解決了這個問題。
在python中充當緩衝池作用的是queue佇列,當然還可以使用檔案等等,本質來講依然是使用了程序間通訊手段。
import threading
import time
from queue import queue
class produccer(threading.thread):
def run(self):
global queue
count = 0
while true:
if queue.qsize() < 1000:
for i in range(100):
count = count + 1
msg = '生成產品' + str(count)
queue.put(msg)
print(msg)
time.sleep(0.5)
class consumer(threading.thread):
def run(self):
global queue
while true:
if queue.qsize() > 100:
for i in range(3):
msg = self.name + '消費了' + queue.get()
print(msg)
time.sleep(1)
if __name__ == '__main__':
queue = queue()
for i in range(500):
queue.put('初始產品' + str(i))
for i in range(2):
p = produccer()
p.start()
for i in range(5):
c = consumer()
c.start()
上面這段**中
有 2個生產者和
5個消費者,生產者每次生產
100個資料,只要緩衝池
(queue)
裡面產品個數少於
1000
,即向裡面新增資料
,消費者每個消費
3個,只要緩衝池裡面資料大於
100,即向外取出資料。
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
python 生產者 消費者
from bs4 import beautifulsoup import requests import time import multiprocessing as mp import re from multiprocessing import queue from multiprocessin...
生產者與消費者
include include include include include include define size of buffer 10 int buffer size of buffer 緩衝陣列 int in 0,out 0 採用迴圈佇列方式進行陣列的訪問 宣告訊號量 sem t ful...