谈到性能测试,总是离不开JMeter、LoadRunner,如果说Python也能做性能测试,那还有一个locust,网上对于locust的描述基本一致,比如同等硬件配置下并发数量比JMeter、LoadRunner多出一个数量级。

既然locust这么好,Python又是测试利器,那性能测试应该没有JMeter、LoadRunner什么事情了。但如果你去看招聘需求,绝大部分都是要求用JMeter、LoadRunner做性能测试。

于是我体验了一把locust,先说结论,locust确实不适合做性能测试。至于原因也很简单,Python的多线程是假的,同样基于协程的locust也一样。

Python由于GIL(Global Interpreter Lock,全局解释器锁) 的限制,同一时刻只有一个线程能够执行 Python 字节码。Python的多线程无法利用CPU多核,假如CPU有8个核心,那么只有1个核在干活,剩余在围观。locust用协程做性能测试也避不开GIL的限制。

那Python真的不能做性能测试了吗?没办法绕过GIL的限制吗?

  1. 除了多线程还有一个多进程的概念,进程之间是相互独立的,多进程可以避开GIL的限制。多进程网上有很多例子,可以自己查找。当然如果不是CPU密集型的任务,每个核的负载也不会明显拉高。
  2. 在Python3.13中官方解除了GIL的限制,目前为试验特性,可能有bug,需要自己编译安装。

其实生活中也有很多这样的现象。吹起来很牛批,但实际上没什么人用,那大概有猫腻。