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()
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