在生產者/消費者模型中,生產者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()