为了账号安全,请及时绑定邮箱和手机立即绑定

Python的多线程是伪命题吗?

Python的多线程是伪命题吗?

小怪兽爱吃肉 2019-02-25 04:43:33
我向别人讨教,在scrapy中使用多线程提高抓取效率的问题,有人回复我说,这涉及Python全局解释器锁(GIL)的问题,我搜索了一下,发现GIL限制Python同一时间只能有一个线程运行。如果是这样的话,那threading库的存在是怎么回事?那多线程爬虫到底存在不存在?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

确切来说: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 集中)。
查看完整回答
反对 回复 2019-03-01
?
LEATH

TA贡献1936条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-03-01
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 785 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信