单线程和多线程执行对比—Python多线程编程

Posted tester_小天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单线程和多线程执行对比—Python多线程编程相关的知识,希望对你有一定的参考价值。

单线程和多线程执行对比

本章使用递归求斐波那契、阶乘与累加函数的执行来对比单线程与多线程;

斐波那契、阶乘与累加(mtfacfib.py):

?
 1 import threading
 2 from time import sleep, ctime
 3 ?
 4 class MyThread(threading.Thread):
 5     def __init__(self, func, args, name=‘‘):
 6         threading.Thread.__init__(self)
 7         self.name = name
 8         self.func = func
 9         self.args = args
10 ?
11     def getResult(self):
12         return self.res
13 ?
14     def run(self):
15         print(starting %s at:%s % (self.name, ctime()))
16         self.res = self.func(*self.args)
17         print(%s finished at:%s % (self.name, ctime()))
18 ?
19 ?
20 def fib(x):
21     sleep(0.005)
22     if x < 2:
23         return 1
24     return (fib(x-2) + fib(x-1))
25 ?
26 def fac(x):
27     sleep(0.1)
28     if x < 2:
29         return 1
30     return (x * fac(x-1))
31 ?
32 def sum(x):
33     sleep(0.1)
34     if x < 2:
35         return 1
36     return (x + sum(x-1))
37 ?
38 funcs = [fib, fac, sum]
39 n = 12
40 ?
41 def main():
42     nfuncs = range(len(funcs))
43 ?
44     print(*** SINGLE THREAD)
45     for i in nfuncs:
46         print(starting %s at:%s % (funcs[i].__name__, ctime()))
47         print(funcs[i](n))
48         print(%s finished at:%s % (funcs[i].__name__, ctime()))
49 ?
50     print(
*** MULTIPLE THREADS)
51     threads = []
52     for i in nfuncs:
53         t = MyThread(funcs[i], (n,), funcs[i].__name__)
54         threads.append(t)
55 ?
56     for i in nfuncs:
57         threads[i].start()
58 ?
59     for i in nfuncs:
60         threads[i].join()
61         print(threads[i].getResult())
62 ?
63     print(all Done)
64 ?
65 if __name__ == __main__:
66     main()

 

 

输出结果为:

 1 E:ProjectTest_Temporary>python mtfacfib.py
 2 *** SINGLE THREAD
 3 starting fib at:Fri Jul 27 08:53:18 2018
 4 233
 5 fib finished at:Fri Jul 27 08:53:20 2018
 6 starting fac at:Fri Jul 27 08:53:20 2018
 7 479001600
 8 fac finished at:Fri Jul 27 08:53:22 2018
 9 starting sum at:Fri Jul 27 08:53:22 2018
10 78
11 sum finished at:Fri Jul 27 08:53:23 2018
12 ?
13 *** MULTIPLE THREADS
14 starting fib at:Fri Jul 27 08:53:23 2018
15 starting fac at:Fri Jul 27 08:53:23 2018
16 starting sum at:Fri Jul 27 08:53:23 2018
17 fac finished at:Fri Jul 27 08:53:24 2018
18 sum finished at:Fri Jul 27 08:53:24 2018
19 fib finished at:Fri Jul 27 08:53:25 2018
20 233
21 479001600
22 78
23 all Done

 

  • 以单线程运行时,只是简单的依次调用每个函数,并在函数执行结束后立即显示相应结果;

  • 以多线程模式运行时,不会立即显示结果,而是等线程都结束后再调用 getResult() 方法来最终显示每个函数的返回值。


以上是关于单线程和多线程执行对比—Python多线程编程的主要内容,如果未能解决你的问题,请参考以下文章

011_Python中单线程多线程和多进程的效率对比实验

单线程多线程和多进程的效率对比实验

Python的多线程和多进程模块对比测试

单线程和多线程处理1W条数据对比代码

Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程

Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程