python中的GIL如何影响并行下载网页?
How does the GIL in python affect the downloading of webpages in parallel?
我对本题背景的理解:
- GIL 一次限制 python 一个线程 运行。
- 因为GIL,多线程长计算没有用
- 线程仍然有用
- 线程可能对 I/O 操作有用
因此我的问题是:
GIL 将如何影响所请求网页的下载?进行并行网页请求是否可以很好地利用 python 线程?因为下载网页是一个 I/O 操作,这是否意味着线程有用?
我会想象一个线程会发出请求 > 另一个线程会在某个时候获得控制权并发出自己的请求 > 另一个线程会获得控制权,等等。然后数据将开始流入,但是如何这会被处理吗?下载会中断吗?我想我缺乏对 OS、python 解释器和 OS.
响应处理的低级理解
GIL 不会在这里伤害你。
对于I/O绑定任务(比如下载网页),GIL不是问题。 Python 在 I/O 发生时释放 GIL,这意味着所有线程将能够并行执行请求。每当您对下载的页面进行 处理 时,这就是 GIL 可能伤害您的地方。
关于一般经验法则你是对的:你可以做 I/O 并且 GIL 不会伤害你,但是对于处理器绑定任务,你应该尝试使用 multiprocessing相反。
有关GIL的更多信息,您可以查看David Beazley's talk
我对本题背景的理解:
- GIL 一次限制 python 一个线程 运行。
- 因为GIL,多线程长计算没有用
- 线程仍然有用
- 线程可能对 I/O 操作有用
因此我的问题是:
GIL 将如何影响所请求网页的下载?进行并行网页请求是否可以很好地利用 python 线程?因为下载网页是一个 I/O 操作,这是否意味着线程有用?
我会想象一个线程会发出请求 > 另一个线程会在某个时候获得控制权并发出自己的请求 > 另一个线程会获得控制权,等等。然后数据将开始流入,但是如何这会被处理吗?下载会中断吗?我想我缺乏对 OS、python 解释器和 OS.
响应处理的低级理解GIL 不会在这里伤害你。
对于I/O绑定任务(比如下载网页),GIL不是问题。 Python 在 I/O 发生时释放 GIL,这意味着所有线程将能够并行执行请求。每当您对下载的页面进行 处理 时,这就是 GIL 可能伤害您的地方。
关于一般经验法则你是对的:你可以做 I/O 并且 GIL 不会伤害你,但是对于处理器绑定任务,你应该尝试使用 multiprocessing相反。
有关GIL的更多信息,您可以查看David Beazley's talk