adj*_*nks 4 python multithreading httpresponse gil
我对这个问题背景的理解:
因此我的问题是:
GIL 将如何影响所请求网页的下载?制作并行网页请求会很好地利用 python 线程吗?因为下载网页是一个 I/O 操作,这是否意味着线程有用?
我会想象一个线程会发出一个请求 > 另一个线程会在某个时候获得控制权并发出自己的请求 > 另一个线程将获得控制权等等。然后数据将开始流入,但是如何处理呢?下载会中断吗?我想我缺乏对操作系统、python 解释器和操作系统的响应处理的低级理解。
对于 I/O 绑定任务(如下载网页),GIL 不是问题。Python 在 I/O 发生时释放 GIL,这意味着所有线程都可以并行执行请求。每当您处理下载的页面时,这就是 GIL 会伤害您的地方。
关于一般经验法则,您是对的:您可以进行 I/O 并且 GIL 不会伤害您,但是对于受处理器限制的任务,您应该尝试改用多处理。
有关 GIL 的更多信息,您可以查看David Beazley 的演讲