码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-03-13 06:40:43      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:python   threading   multiprocessing   

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


一 测试CPU消耗类型任务

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

CPU消耗类型任务

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

1.单个线程测试

#!/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()
real	0m4.965s
user	0m4.104s
sys	0m0.797s

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


2.使用2个线程

设置 threads=3

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

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

3.使用4个线程

设置 threads=5

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

4.使用8个线程

设置 threads=9

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


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


5.单个进程测试






















参考文档:

https://www.quantstart.com/articles/parallelising-python-with-threading-and-multiprocessing



本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1750380

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

标签:python   threading   multiprocessing   

原文地址:http://john88wang.blog.51cto.com/2165294/1750380

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!