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

adj*_*nks 4 python multithreading httpresponse gil

我对这个问题背景的理解:

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

因此我的问题是:

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

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

Cod*_*all 5

GIL 不会在这里伤害你。

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

关于一般经验法则,您是对的:您可以进行 I/O 并且 GIL 不会伤害您,但是对于受处理器限制的任务,您应该尝试改用多处理

有关 GIL 的更多信息,您可以查看David Beazley 的演讲