python爬虫 - Python的多线程是伪命题吗?
ringa_lee
ringa_lee 2017-04-17 14:28:04
[Python讨论组]

我向别人讨教,在scrapy中使用多线程提高抓取效率的问题,有人回复我说,这涉及Python全局解释器锁(GIL)的问题,我搜索了一下,发现GIL限制Python同一时间只能有一个线程运行。如果是这样的话,那threading库的存在是怎么回事?那多线程爬虫到底存在不存在?

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
天蓬老师

确切来说:GIL 限制 Python 同一时间只能有一个线程持有 GIL。

通常在进入一些不需要 Python 解释器的 C 代码之前,库程序会/应显式释放 GIL:

cPy_BEGIN_ALLOW_THREADS
// ... Do some blocking I/O operation ...
Py_END_ALLOW_THREADS

因此回答问题:

  1. threading 库仍然是有效的多线程,只不过在执行基于 Python 解释器的 CPU 集中的操作时,不要指望它(CPython)能充分利用多核 CPU(其他尝试);
  2. 存在的,Python 多线程可以实现并行抓取(I/O 集中),但无法用作 Python 多核并行处理(CPU 集中)。
PHP中文网

因为爬虫程序90%的时间是在等啊

巴扎黑

明显不是,你好好看看官方的文档

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号