python中的多线程技术

本文探讨了Python中多线程技术的实际效果,并对比了多进程技术在提高CPU利用率和减少任务执行时间方面的表现。

最近在做项目的时候,使用了大量的python多线程技术,结果发现效率不如想象的那么高。仔细研究了下,才发现是个人长久以来使用python多线程的一个误区:

         具体问题如下:

sinCpuMain.py脚本使用threading的模块创建了N个多线程,cpurate.sh是一个监控cpu使用率的脚本。通过调试不同的参数N,得到如下的表:

线程数

使用率

消耗时间

1

6.27%~5.39%

0:00:09.987037

2

7.74%~7.18%

0:00:36.152315

4

9.09%~9.44%

0:01:23.382693

8

8.82%~9.13%

0:02:51.702328

16

9.01%~8.78%

0:05:33.370549

从上面可以看到问题,线程数倍增,cpu使用率不增,消耗时间却倍增。这和想象的相距甚远,理论上来说,应该随着线程数的增加,cpu的使用率应该往上升,消耗时间应该没有明显变化。

为此特别去研究了下多线程技术,有两种:一种是单cpu的多线程技术,一种是多cpu的多线程技术。在多核的时代,显然是后者更有效率。

但很不幸,上面的事实告诉我们,python的多线程技术是前者,是伪多线程,主要是由于python的解释器的后台中存在一个全局锁,这导致只能有一个线程获取该锁进行执行。具体描述见链接:http://developer.51cto.com/art/201003/189708.htm

如果一定要充分利用cpu的资源的,也是有办法的,可以利用python的多进程技术。具体方法有很多,python中有multiprocessing,os,commands等模块,下面是我用multiprocessing模块的一个测试(mulCpuMain.py):

进程数

使用率

消耗时间

1

6.30%~ 6.29%

0:00:10.354268

2

12.09%~ 12.21%

0:00:09.726785

4

25.06%~ 25.16%

0:00:09.742427

8

50.03%~ 50.23%

0:00:10.102721

16

100.00%~ 100.00%

0:00:20.012515

14

87.58%~ 81.03%

0:00:17.945362

12

75.02%~ 63.07%

0:00:15.038473

10

61.56%~ 62.53%

0:00:14.640572

当cpu使用率小于或者接近50%的时候,进程数倍增,使用率也倍增,消耗时间却基本不变。

当cpu使用率大于50%的时候,进程数增加,使用率也增加,消耗时间也增加。

所以性价比最高的时候,应该是在50%左右的cpu利用率的时候。

 

测试环境为dw-dhw-dev,有物理cpu两个,虚拟cpu16个(命令cat /proc/cpuinfo | grep processor |wc -l)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值