21312 发表于 2016-3-14 09:10:19

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

本文主要对比测试Python的多线程和多进程模块在CPU类型和I/O的任务操作时的效率


一 测试CPU消耗类型任务
在一台多核CPU的服务器上执行多线程代码,理论上代码执行时会利用多余的CPU核心来提升性能。但是由于Python的GIL的存在,使用多线程来执行CPU繁重的任务,未必能得到性能提升。但是GIL又必不可少,因为在Python解释器中执行线程是不安全的,也就是说为了保证Python线程执行时的安全,Python提供了一个全局锁,同一时刻,只允许一个线程获得这个全解锁并执行。
CPU消耗类型任务

1
2
3
4
5
def f(n):
    list=[]
    for x in range(n):
      x=x*x
      list.append(x)




1.单个线程测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/sbin/python
import threading

def f(n):
    list=[]
    for x in range(n):
      x=x*x
      list.append(x)

if __name__ == '__main__':
   threads=2
   tasks=[]
   for i in range(1,threads):
      thread=threading.Thread(target=f(10000000))
      tasks.append(thread)
   for j in tasks:
      j.start()
   for j in tasks:
      j.join()





1
2
3
real    0m4.965s
user    0m4.104s
sys 0m0.797s




使用单线程执行时间大约为4.9秒

2.使用2个线程
设置 threads=3

1
2
3
real    0m8.469s
user    0m7.480s
sys 0m0.981s




使用两个线程执行以上任务,性能反而下降了很多

3.使用4个线程
设置 threads=5


1
2
3
real    0m16.016s
user    0m14.712s
sys 0m1.285s




4.使用8个线程
设置 threads=9

1
2
3
real    0m31.374s
user    0m29.231s
sys 0m2.108s





通过以上测试可以得知,使用Python的多线程模块,线程数越多,执行CPU消耗类型的任务时,效率越低。

5.单个进程测试




页: [1]
查看完整版本: Python的多线程和多进程模块对比测试