您的位置:首页 > 编程语言 > Python开发

python 多线程编程(三)

2012-03-09 17:38 399 查看
threading模块是python线程很重要的一个模块,可以简化很多线程的操作,下面是个三个函数计算,可以看到单线程的情况下消耗了5秒钟,多线程的情况下只用了2秒多一点:

'''
Created on 2012-3-9

@author: Administrator
'''
#!/usr/bin/env python

from MyThread import MyThread
from time import ctime,sleep

def fib(x):
sleep(0.005)
if x<2:
return 1
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():
nfuncs = range(len(funcs))

print '*** single thread'
for i in nfuncs:
print 'starting',funcs[i].__name__,'at:',\
ctime()
print funcs[i](n)
print funcs[i].__name__,'done at:',\
ctime()

print '\n*** multiple thread'
threads=[]
for i in nfuncs:
t=MyThread(funcs[i],(n,),funcs[i].__name__)
threads.append(t)

for i in nfuncs:
threads[i].start()

for i in nfuncs:
threads[i].join()
print threads[i].getResult()

print 'all done'

if __name__=='__main__':
main()

运行结果:

*** single thread
starting fib at: Fri Mar 09 17:38:03 2012
233
fib done at: Fri Mar 09 17:38:05 2012
starting fac at: Fri Mar 09 17:38:05 2012
479001600
fac done at: Fri Mar 09 17:38:06 2012
starting sum at: Fri Mar 09 17:38:06 2012
78
sum done at: Fri Mar 09 17:38:08 2012

*** multiple thread
starting fib at: Fri Mar 09 17:38:08 2012
starting fac at: Fri Mar 09 17:38:08 2012
starting sum at: Fri Mar 09 17:38:08 2012
sumfac  done at:done at:  Fri Mar 09 17:38:09 2012Fri Mar 09 17:38:09 2012

fib done at: Fri Mar 09 17:38:10 2012
233
479001600
78
all done


MyThread的代码如下:

'''
Created on 2012-3-9

@author: Administrator
'''
#!/usr/bin/env python

import threading
from time import 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,'done at:',\
ctime()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: