![Python 多线程在 VPS 服务器上不起作用](https://linux22.com/image/594632/Python%20%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%9C%A8%20VPS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在运行一个具有多个进程的 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 比例。