python 多线程 联系代码(Python核心编程里面的例子)

先自定义一个线程的子类,这个跟Java很像,主要功能的实现实在run方法里面


# -*- coding: utf8 -*- 
import threading
import time

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 'this is the method run starting %s at %s ' % (self.name,time.ctime())
        #用于当函数参数已经存在于一个元组或字典中时,间接地调用函数
        self.res = apply(self.func,self.args)
        print '%s finnishing at %s \n' % (self.name,time.ctime())

在写一个测试的类,Python可以把方法传到某个类里面,这个比较神奇的


看代码:


# -*- coding: utf8 -*- 
import time
import sys
import datetime

#在同一个目录下面可以直接引用
import MyThread
def fib(x):
    time.sleep(0.05)
    if x<2:return 1
    return (fib(x-2) +fib(x-1))
def fac(x):
    time.sleep(0.1)
    if x<2:return 1
    return (x*fac(x-1))
def sum_(x):
    time.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 START******'
    Tstarttime = datetime.datetime.now()
    Sstarttime = datetime.datetime.now()
    for i in nfuncs:
        print 'start ',funcs[i].__name__,'at : ',\
              time.ctime()
        starttime = datetime.datetime.now()
        print funcs[i](n)
        endtime = datetime.datetime.now()
        print funcs[i].__name__,(endtime - starttime).seconds,'s'
        print funcs[i].__name__,'finnished ','at : ',\
              time.ctime()

    Sendtime = datetime.datetime.now()
    print 'SINGLE THREAD TIME ',(Sendtime - Sstarttime).seconds,'s'
    Mstarttime = datetime.datetime.now()
    print '******MULTIPLE THREAD START*****'
    threads = []#用来存放线程
    for i in nfuncs:
        #MyThread.MyThread,要注意,不要直接MyThread只是模块,要引用到里面的类才行,否则
        #报TypeError: 'module' object is not callable 错误
        t = MyThread.MyThread(funcs[i],(n,),funcs[i].__name__)
        threads.append(t)

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

    for i in nfuncs:
        #当前进程的其他线程调用了join方法之后,会阻塞当前进程等待其他线程执行完在往下执行,可以给join设置超时参数
        threads[i].join()
        print i
        print threads[i].getResult()
    Mendtime = datetime.datetime.now()
    
    print 'MULTIPLE THREAD TIME ',(Mendtime - Mstarttime).seconds,'s'
    Tendtime = datetime.datetime.now()
    print 'TOTAL TIME ',(Tendtime - Tstarttime).seconds,'s'
    print 'ALL DONE'

if __name__ == '__main__':
    main()


最后在看一下结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值