Python多线程 - 全局解释器锁

时间:2014-05-06 23:39:43

标签: python mysql multithreading

Python threading module文档说的是这样的

  

在CPython中,由于Global Interpreter Lock,只有一个线程可以   一次执行Python代码(即使某些性能导向   图书馆可能会克服这个限制)。如果你想要你的   应用程序,以更好地利用计算资源   多核机器,建议您使用多处理。然而,   如果要运行多个线程,线程仍然是一个合适的模型   同时进行I / O绑定任务。

有人可以解释我是否可以在我的情况下使用线程模块?

我将检测网站使用的框架。

以下是我的应用的工作原理

  • 我的MySQL数据库包含大约1000万个域(id,域,框架)
  • 从数据库中提取1000行
  • 使用请求模块
  • 逐个抓取域名
  • 检测框架
  • 使用结果更新数据库行。

由于我有1000万个域名,因此需要很长时间。所以我想通过使用线程来加速这个过程。

但我不确定我的应用程序是否受I / O限制。有人可以解释一下吗?

三江源

1 个答案:

答案 0 :(得分:1)

我想,最耗时的活动将是获取所有网址。

所以问题的答案是:是的,您的应用很可能受到I / O限制。

您打算逐个删除域名,这会导致很长的处理时间。你肯定会同时做到这一点。描述了一个与抓取网站相关的in my answer to similar question解决方案。

无论如何,您的网址数量似乎非常大,您可能需要利用将工作分成多个工作人员 - 为此,您可以使用例如芹菜框架。但是,由于您的任务实际上是I / O限制,如果您的员工在多台计算机上工作,理想情况下可以使用独立连接,那么您只能获得一些速度。我在DigitalOcean机器上做了类似的任务,效果非常好。