Python中的多线程爬虫真的能加快速度吗?
我想用Python写一个小的网络爬虫。最近我在研究怎么把它写成一个多线程的脚本,一个线程池负责下载,另一个线程池处理结果。由于有个叫GIL的东西,这样真的能同时下载吗?GIL对网络爬虫有什么影响?每个线程会先从网络连接中取一些数据,然后再让下一个线程来取数据,依次进行吗?
简单来说,我想知道在Python中做一个多线程的爬虫,真的能比单线程的爬虫提高多少性能?
谢谢!
5 个回答
6
看看scrapy是怎么工作的吧。它能帮你很多忙。它不使用线程,但可以在同一个线程里同时进行多个下载。
想想看,你只有一张网络卡,所以从定义上来说,真正的并行处理其实帮不了你多少。
scrapy做的事情就是不在一个请求的响应上浪费时间,而是在等待一个请求的同时,直接发送下一个请求。所有这些都是在一个线程里完成的。
8
在进行网络操作时,Python解释器并不会持有全局解释器锁(GIL)。如果你在做一些依赖网络的工作,比如爬虫程序,那么你可以放心地忽略GIL带来的影响。
另一方面,如果你创建了很多线程来处理下载后的数据,你可能想要测量一下你的性能。在这种情况下,限制线程的数量可以减少GIL对你性能的影响。