Python 多线程在 VPS 服务器上不起作用

Python 多线程在 VPS 服务器上不起作用

我正在运行一个具有多个进程的 python 多线程应用程序,该应用程序从一些网站抓取数据。在本地主机上运行时,它运行良好,但在我使用的 vps 服务器(Centos 5.8,2.6 GHZ,4 核)上运行非常慢。

从 nethogs 命令中,我发现网络使用率太低。使用 15 个线程时,我的网络使用率约为 8KBps。另一方面,在我的 PC 上,我的网络使用率约为 100-120KBPS。

我读过关于 Python GIL 和线程限制的文章。似乎 GIL 永远不会释放 VPS 上的锁,尽管它在执行 I/0 时应该释放

我是否需要更改 VPS 中的任何配置才能使线程正常工作?

更新: 实际上多线程正在工作,但问题是 CPU。15 个线程对它来说太多了,线程切换变得太忙了。虽然 VPS 声称它是 2.6 GHZ CPU,但我认为它实际上不是。有没有办法测量 VPS 中的实际处理器速度?

答案1

您几乎肯定会与同一主机上的其他 VPS 共享 CPU,因此您不能期望获得与专用 CPU 相同的性能。GIL 在不同的 CPU 上的行为不会有所不同,因此这不是原因。使用top检查 VPS 上的 CPU 利用率;您主要对Cpu以下行感兴趣:

Cpu(s): 30.2%us,  7.8%sy,  0.0%ni, 41.0%id, 20.8%wa,  0.0%hi,  0.2%si,  0.0%st

使用最新的虚拟机管理程序和操作系统,您应该会看到一个非零st数字 - 这是同一主机上其他虚拟机“窃取”的 CPU 时间,从中您可以了解您获得的 CPU 比例。

相关内容