一个简单的生成者消费者的例子:
'''
Created on 2012-3-9
@author: Administrator
'''
#!/usr/bin/env python
from random import randint
from time import sleep
from Queue import Queue
from MyThread import MyThread
def writeQ(queue):
print 'product object for Q...',queue.put('xxx',1)
print 'size now',queue.qsize()
def readQ(queue):
val=queue.get(1)
print 'consumer object from Q... size now',\
queue.qsize()
def writer(queue,loops):
for i in range(loops):
writeQ(queue)
sleep(randint(1,3))
def reader(queue,loops):
for i in range(loops):
readQ(queue)
sleep(randint(2,5))
funcs=[writer,reader]
nfuncs=range(len(funcs))
def main():
nloops=randint(2,5)
q=Queue(32)
threads=[]
for i in nfuncs:
t=MyThread(funcs[i],(q,nloops),funcs[i].__name__)
threads.append(t)
for i in nfuncs:
threads[i].start()
for i in nfuncs:
threads[i].join()
if __name__=='__main__':
main()
一种可能的运行结果如下:
starting writer at: Fri Mar 09 17:56:12 2012 product object for Q...starting Nonereader size nowat: 1Fri Mar 09 17:56:12 2012 consumer object from Q... size now 0 product object for Q... None size now 0consumer object from Q... size now 0 product object for Q... None size now 1 product object for Q... None size now 2 product object for Q... consumer object from Q... size now None size now2 2 writer done at: Fri Mar 09 17:56:20 2012 consumer object from Q... size now 1 consumer object from Q... size now 0 reader done at: Fri Mar 09 17:56:31 2012