一个简单的生成者消费者的例子:
'''
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