关于 python 爬虫速率的疑问

2016-10-31 16:53:54 +08:00
 mintyun

优化网络:

1.我理解 爬虫主要的问题在于网络阻塞,所以使用多线程弥补 HTTP 异步等待。 那么使用了gevent解决网络问阻塞题,就不需要使用多线程吗?

优化 CPU :

2.python 多线程运行时,使用的是单核心,还是多核心?在多核心机器上运行如果是单核心,能否同时使用多线程多进程

3.在 4 核心 8 线程的电脑上,开启单个进程 32 线程 python 运行,这些线程是怎么分配的?

4.当网络阻塞不是瓶颈,如何才能最大化使用单台电脑 CPU ?应该使用多线程还是多进程增大爬取速率?

5.使用消息队列分布式爬虫,等待的消息过多会不会存在内存或 CPU 问题?

6.使用消息队列是如何增大爬取速率的?

2783 次点击
所在节点    Python
12 条回复
leavic
2016-10-31 17:16:36 +08:00
首先,从来没有任何框架真正解决了网络阻塞问题, gevent 和 twisted 之类的异步是变相的网络多线程,理论上你可以一直异步一直等待,但你的连接数会达到无限大,在这之前连接就被服务器干掉了。
在这个前提下,异步也只能在一个限定的连接数之下充分发挥你最大的带宽而已,网络依然是阻塞的。
cdwyd
2016-10-31 17:20:07 +08:00
感觉你考虑太多了,爬虫的限制一般都来自目标网站
sunwei0325
2016-10-31 17:46:16 +08:00
花大把时间搞定之后, 一个 captcha 傻眼了
holajamc
2016-10-31 17:58:03 +08:00
你可以试试 pypy ,我觉得足够了= =
binux
2016-10-31 18:04:01 +08:00
1. 不需要
2. 单核,启动多个进程
3. 随机使用一个核
4. 多进程
5. 会
6. 使用消息队列不会增大爬取速率
ioiogoo
2016-10-31 18:31:19 +08:00
真的不担心把目标网站爬挂吗?
anexplore
2016-10-31 19:30:13 +08:00
真正的瓶颈来源于目标网站的反爬虫策略
WinterWu
2016-10-31 20:01:12 +08:00
瓶颈在 IO ,也就是网络上,包括目标网站的响应速度、网络状况、本地网络等。这个响应速度实际情况下至少也是 10ms 以上的,而你 CPU 处理这个页面速度怎么也在 0.01ms 以下吧(除非你里面又放了什么 IO 操作);所以你看这个速度差距在 1000 倍以上;你唯一要考虑的是目标网站把你当 DOS 攻击把你屏蔽了(有各种屏蔽方式)。如果对方真允许你这么快,你也的确需要这么快,那么多开几个进程吧;注意不要重复爬就是了。
分布式爬虫什么的不是爬单个简单目标,而是爬很多目标的情况下使用的,这个是集群情况下使用,单机就不用了吧。

另外楼主的问题其实不是关于爬虫的,而是计算机 /软件基础知识不清楚,建议补补这些吧。
ljcarsenal
2016-10-31 20:03:38 +08:00
@sunwei0325 233333
em70
2016-10-31 20:03:59 +08:00
python 的多线程本身就不稳定,我一般是把程序写成单线程,但启动多个进程来跑,非常稳定
sudoz
2016-10-31 20:11:28 +08:00
1L 已经回答了
yanzixuan
2016-11-01 13:55:43 +08:00
@em70 有时候要半路停下来就挺恶心了,要 awk 然后 xargs kill 。一个脚本里多个进程,杀起来就比较容易。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/316840

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX