首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的多线程爬虫真的可以提高速度吗?

Python中的多线程爬虫真的可以提高速度吗?
EN

Stack Overflow用户
提问于 2010-05-14 07:02:43
回答 5查看 5.2K关注 0票数 10

我想用python写一个小的网络爬虫。我开始研究将其编写为多线程脚本,一个线程下载池和一个池处理结果。由于有了GIL,它真的可以同时下载吗?GIL对网络爬虫有什么影响?会不会每个线程从套接字中提取一些数据,然后转到下一个线程,让它从套接字中提取一些数据,等等?

基本上我想问的是,用python做一个多线程爬虫真的比单线程能给我带来更多的性能吗?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-14 07:19:52

当涉及到爬行时,最好使用基于事件的东西,比如Twisted,它使用非阻塞的异步套接字操作来获取和返回数据,而不是对每个数据进行阻塞。

异步网络操作很容易实现,而且通常是单线程的。网络I/O几乎总是比CPU具有更高的延迟,因为您真的不知道页面返回需要多长时间,而这正是异步的闪光点,因为异步操作比线程轻得多。

编辑:这是一个如何使用Twisted的getPage来创建一个简单的网络爬虫的simple example

票数 1
EN

Stack Overflow用户

发布于 2010-05-14 07:08:54

在进行网络操作时,Python解释器不持有GIL。如果您正在做与网络相关的工作(如爬虫),则可以安全地忽略GIL的影响。

另一方面,如果你创建了很多线程进行处理(在下载之后),你可能想要测量你的性能。限制线程的数量将减少GIL对性能的影响。

票数 8
EN

Stack Overflow用户

发布于 2010-05-14 07:16:30

看看scrapy是如何工作的。这对你有很大的帮助。它不使用线程,但可以在同一个线程中进行多个“同时”下载。

如果你仔细想想,你只有一块网卡,所以根据定义,并行处理并不能真正起到作用。

所做的就是在发送另一个请求之前,不会等待scrapy等待另一个请求的响应。所有这些都在一个线程中。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2830880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档