經典模型-生產者消費者模型

wKioL1gh7iCxN7KJAACZZwVyFVs172.png-wh_50

在生產者/消費者模型中,生產者Producer負責生產數據,而消費者Consumer負責使用數據。多個生產者線程會在同一時間運行,生產數據,並放到內存中一個共享的區域(Queue)。期間,多個消費者線程讀取內存共享區,消費裏面的數據

解釋:

  • 1、我們開始了一個生產者線程(下稱生產者)和一個消費者線程(下稱消費者)。

  • 2、生產者不停地添加(數據)到隊列,而消費者不停地消耗。

  • 3、由於隊列是一個共享變量,我們把它放到lock程序塊內,以防發生競態條件。

  • 4、在某一時間點,消費者把所有東西消耗完畢而生產者還在掛起(sleep)。消費者嘗試繼續進行消耗,但此時隊列爲空,出現IndexError異常。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import threading
import time
import Queue
import random

q=Queue.Queue()
lock=threading.RLock()
def Product(name):
    for i in range(20):
        lock.acuqire()
        q.put(i)
        print "------",(name,i)
        lock.release()
        time.sleep(random.randrange(4))
def Consumer(name):
    count=0
    while count<20:
        lock.acuqire()
        data=q.get()
        count+=1
        print "......",(name,data)
        lock.release()
        time.sleep(random.randrange(4))
p=threading.Thread(target=Product,args=('aaa',))
c=threading.Thread(target=Consumer,args=('bbb',))
p.start()
c.start()
發佈了87 篇原創文章 · 獲贊 30 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章