python 多线程编程(三)

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值