生产者--消费者问题和Queue模块

myThread.py

import threading
from time import sleep,ctime

class MyThread(threading.Thread):
    def __init__(self,func,args,name=''):
        threading.Thread.__init__(self)
        self.name=name
        self.func=func
        self.args=args

    def getResult(self):
        return self.res
    def run(self):
        print 'starting', self.name, 'at:', \
              ctime()
        self.res=apply(self.func,self.args)
        print self.name,'finished at:', \
              ctime()

prodcons.py

from random import randint
from time import sleep
from Queue import Queue
from myThread import MyThread

def writeQ(queue):
    print 'producing object for Q...'
    queue.put('xxx',1)
    print "size now", queue.qsize()

def readQ(queue):
    val=queue.get(1)
    print 'consumed 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()

    print 'all Done'


if __name__=='__main__':
    main()

运行结果:

>>> starting writerstarting  at:reader  Tue Dec 18 16:10:44 2012at: Tue Dec 18 16:10:44 2012

producing object for Q...
size nowconsumed object from Q...size now 0 
0
producing object for Q...
size now 1
producing object for Q...
size now 2
producing object for Q...
size now 3
consumed object from Q...size now 2
producing object for Q...
size now 3
writer finished at: Tue Dec 18 16:10:53 2012
consumed object from Q...size now 2
consumed object from Q...size now 1
consumed object from Q...size now 0
reader finished at: Tue Dec 18 16:11:08 2012
all Done



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值