python核心编程-线程threading模块之单线程多线比较

来源:互联网 发布:蜂窝移动网络 4g 编辑:程序博客网 时间:2024/06/05 20:12

myThread.py

python -O -m py_compile myThread.py

#!/usr/bin/env python# -*- coding: UTF-8 -*- ''' function :线程模块threading    仅练习'''from time import sleep, ctimeimport threadingloops = (4, 2)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 'staring', self.name, 'at:', ctime()        self.res = apply(self.func, self.args)        print self.name, 'finished at:', ctime()

thread08.py

#!/usr/bin/env python# -*- coding: UTF-8 -*- ''' function :线程模块threading    仅练习'''from myThread import MyThreadfrom time import sleep, ctimedef 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 = 12def 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__, 'finished at:', ctime()    print '\n*** MULTIPLE THREADS'    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()

输出:

D:\Python27\test>thread08.py
* SINGLE THREAD
starting fib at: Wed Jan 20 22:56:56 2016
233
fib finished at: Wed Jan 20 22:56:59 2016
starting fac at: Wed Jan 20 22:56:59 2016
479001600
fac finished at: Wed Jan 20 22:57:00 2016
starting sum at: Wed Jan 20 22:57:00 2016
78
sum finished at: Wed Jan 20 22:57:01 2016

* MULTIPLE THREADS
staring staringfib staringfacat: sumat:Wed Jan 20 22:57:01 2016 at:
Wed Jan 20 22:57:01 2016
Wed Jan 20 22:57:01 2016
facsum finished at:finished at: Wed Jan 20 22:57:03 2016
Wed Jan 20 22:57:03 2016
fib finished at: Wed Jan 20 22:57:04 2016
233
479001600
78
all DONE

D:\Python27\test>

0 0