繁体   English   中英

Python多线程-全局解释器锁定

[英]Python multithreading - Global Interpreter Lock

Python 线程模块文档说了这样的话

在CPython中,由于使用了全局解释器锁,因此只有一个线程可以一次执行Python代码(即使某些面向性能的库可能克服了此限制)。 如果希望您的应用程序更好地利用多核计算机的计算资源,建议您使用多处理。 但是,如果您要同时运行多个I / O绑定任务,则线程化仍然是合适的模型。

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

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

这就是我的应用程序的工作方式

  • 我的MySQL数据库包含大约一千万个域(id,domain,framework)
  • 从数据库中获取1000行
  • 使用请求模块一对一地抓取域
  • 检测框架
  • 用结果更新数据库行。

由于我有1000万个域,因此将花费很长时间。 因此,我想通过使用线程来加快过程。

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

谢谢

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

因此,您的问题的答案是:是的,您的应用很有可能受I / O约束。

您计划一一刮取域,这将导致处理时间过长。 您一定要同时进行。 我对与抓取网站有关的类似问题的回答中描述一种解决方案。

无论如何,URL的数量看起来确实很大,您可能需要利用将工作拆分为多个工作人员的优势-为此,您可以使用例如Celery框架。 但是,由于您的任务实际上是I / O绑定的,因此,如果您的工作人员在多台计算机上工作,并且理想情况下具有独立的连接性,那么您将只能获得一定的速度。 我在DigitalOcean机器上做了类似的任务,并且效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM