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

时间:2015-08-27 18:20:41

标签: python multithreading httpresponse gil

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

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

因此我的问题是:

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

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

1 个答案:

答案 0 :(得分:2)

GIL不会在这伤害你。

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

你的一般经验法则是正确的:你可以做I / O而GIL不会伤害你,但是对于处理器绑定的任务,你应该尝试使用multiprocessing

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