我有一个电子商务网站,我想检查其链接。有几个因素使得检查变得复杂:
- 过滤导航
- 每个页面都包含一个大型主菜单(>500 个链接)
到目前为止,我使用的每个检查器都无法应对该检查的范围(内存不足、速度极慢,随便你怎么说)。我试过链接检查器,到目前为止,它运行正常。然而,限制因素似乎是 CPU。
我当前使用的机器是 vServer、8 核、12GB RAM、64 位 Ubuntu 14.04:
- Python 2.7.6(默认,2015 年 6 月 22 日,17:58:13)
- linux2 上的 [GCC 4.8.2]
我租用这台机器只是为了能够链接检查我们的网站。
但是,在我看来,linkchecker 并没有利用其他核心。机器的 CPU 使用率一直保持在 101% 到 104% 之间(以 为例top
)。我知道提取链接需要大量 CPU,并且默认情况下并行检查 100 个线程/页面,在我看来,将这项工作扩展到多个核心上是件非常好的事情。
我目前需要检查大约 50k 个链接,但只完成了 800 个。我认为使用多个核心会让整个过程受益匪浅。所以我的问题是:为什么它没有使用所有 CPU 核心?
编辑:添加程序和操作系统版本
答案1
目前,CPython 的多线程能力受到严重限制,原因是全局解释器锁
简而言之,由于它的存在,大多数时候 CPython 都会运行单身的线程与可用(可运行)线程之间的区别。这反过来又解释了您观察到的行为。
没有简单的解决方案。无论如何,您可以尝试使用其他 Python 实现(例如:Jython)。