python - python中的GIL如何影响并行下载网页?

标签 python multithreading httpresponse gil

我对本题背景的理解:

  • GIL 将 python 限制为一次运行一个线程。
  • 因为GIL,多线程长计算没有用
  • 线程仍然有用
  • 线程可能对 I/O 操作有用

因此我的问题是:

GIL 将如何影响所请求网页的下载?进行并行网页请求是否可以很好地利用 python 线程?因为下载网页是一个 I/O 操作,这是否意味着线程有用?

我会想象一个线程会发出请求 > 另一个线程会在某个时候获得控制权并发出自己的请求 > 另一个线程会获得控制权,等等。然后数据将开始流入,但这将如何被处理?下载会中断吗?我想我缺乏对操作系统、python 解释器和操作系统的响应处理的底层理解。

最佳答案

GIL 不会在这里伤害你。

对于 I/O 绑定(bind)任务(如下载网页),GIL 不是问题。 Python 在 I/O 发生时释放 GIL,这意味着所有线程将能够并行执行请求。每当您处理下载的页面时,这就是 GIL 可能伤害您的地方。

关于一般经验法则,您是正确的:您可以执行 I/O 并且 GIL 不会伤害您,但是对于处理器绑定(bind)任务,您应该尝试使用 multiprocessing相反。

有关 GIL 的更多信息,您可以查看 David Beazley's talk

关于python - python中的GIL如何影响并行下载网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256775/

相关文章:

javascript - http 服务器响应异步函数的输出

python执行列表和函数列表

python - 如何获取多行字符串中第一行的长度?

python - Cython 不够快

c++ - Linux 上的互锁等效项

java - 一个java应用程序可以有多少个线程池

python - 增加决策树中节点的大小

Python 线程 - 多线程崩溃

c# - Web API HttpResponseMessage 内容返回不完整

http - HTTP 响应 "200 OK"是否保证文档已被生成 HTTP 请求的机器接收?