标签:
#-*- encoding:utf-8 -*- import threading from time import ctime class MyThread(threading.Thread): def __init__(self,func,args,name=‘‘): threading.Thread.__init__(self) self.func=func self.args=args self.name=name def getResult(self): return self.res def run(self): print(‘starting‘,self.name,‘at‘,ctime()) self.res=self.func(self.args[0],self.args[1]) ####此处需要修改 print(self.name,‘finished at:‘,ctime())
1.几种递归的运算
from MyThread import MyThread from time import ctime,sleep def fib(x): sleep(0.005) if x<2: return 1 else: return (fib(x-2)+fib(x-1)) def fac(x): sleep(0.1) if x<2: return 1 return (x*fac(x-1)) def sum(x): sleep(0.1) if x<2: return 1 return (x+sum(x-1)) funcs=[fib,fac,sum] n=12 def main(): nfunc=range(len(funcs)) print(‘*****SINGLE THREAD‘) for i in nfunc: print(‘starting‘,funcs[i].__name__,‘at:‘,ctime()) print(funcs[i](n)) print(funcs[i].__name__,‘finished at:‘,ctime()) print(‘******MULTIPLE THREADS‘) threads=[] for i in nfunc: t=MyThread(funcs[i],(n,),funcs[i].__name__) threads.append(t) for i in nfunc: threads[i].start() for i in nfunc: threads[i].join() print(threads[i].getResult()) print(‘All Done‘) if __name__==‘__main__‘: main()
利用Queue模块解决生产者和消费者问题
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 write(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=[write,reader] nfunc=range(len(funcs)) def main(): nloops=randint(2,5) q=Queue(32) threads=[] for i in nfunc: t=MyThread(funcs[i],(q,nloops),funcs[i].__name__) threads.append(t) for i in nfunc: threads[i].start() for i in nfunc: threads[i].join() print(‘All Done‘) if __name__==‘__main__‘: main()
标签:
原文地址:http://www.cnblogs.com/itdyb/p/5501076.html