我对本题背景的理解:
- 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/