单机多线程爬虫,是不是线程池大小越大越好?

2019-10-15 12:10:10 +08:00
 taogen

RT 想问一下,关于爬虫效率的问题。

假设前提:

爬虫服务器:1. 单机。2. 网络 1000 Mpbs。3. 硬件( CPU,内存条,磁盘)当前市场高配水平。

目标网站服务器:1. 不限制 IP,不限访问频率。2. 无限的响应速度(高并发,低延迟)。

请问各位大佬,在上面的前提下,想要最大化爬虫的效率,有哪些优化措施?另外,是不是线程池大小越大越好?

3367 次点击
所在节点    程序员
18 条回复
xeaglex
2019-10-15 12:12:50 +08:00
尽量调大。CPU,硬盘 IO,网络 IO,三者之一跑满其一为止
wangyzj
2019-10-15 12:30:57 +08:00
把 CPU 干满
wangkai0351
2019-10-15 12:37:19 +08:00
我是外行不懂这个,爬虫应该是 IO 密集操作,多线程的异步搞了没有。
taogen
2019-10-15 12:45:38 +08:00
@wangkai0351 #3 异步没有考虑到,等会研究一下。十分感谢~
ClericPy
2019-10-15 12:47:09 +08:00
以前在 python 里测试过, 1 核 CPU, 线程并发 1 到 2 , 提升明显, 2 到 5 变化也很大, 超过 5, 线程切换开销比较大的情况下, 耗费时间就没那么明显的优势了. python3 ThreadPoolExecutor 官方建议的好像是 n*5, 也就是 pool size 是 None 的时候
if max_workers is None:
# Use this number because ThreadPoolExecutor is often
# used to overlap I/O instead of CPU work.
max_workers = (os.cpu_count() or 1) * 5

不过协程的时候就不会太讲究了, 开 100 并发, 性能一直是线程三倍以上
sadfQED2
2019-10-15 12:53:17 +08:00
这是什么网站这么好爬啊,另外,出租人道主义,别太过分吧,太过分别人加上验证码,加上 ip 限制,大家都加班
taogen
2019-10-15 13:12:58 +08:00
@sadfQED2 #6 这只是理论方法讨论。实际场景肯定会有很多阻碍,也会多方面考虑的。
RicardoY
2019-10-15 13:27:14 +08:00
要上异步 io 的 如果希望效率好的话 scrapy 或者 pyspider 考虑一下
ddddad
2019-10-15 13:35:16 +08:00
跟 cpu 核数差不多就可以了,再多线程切换消耗比较大。影响因素也挺多的

ps:影响网站运行就违法了
lolizeppelin
2019-10-15 13:36:39 +08:00
要抓住重点,池不池不重要,核心是要跑满 cpu
但是要避免线程多了上下问切换是浪费掉的

因为 python 多线程是废的,根本不用考虑多线程, 协程+多进程就是
taogen
2019-10-15 13:41:34 +08:00
@lolizeppelin #10 豁然开朗,多谢大佬指点
zjh6
2019-10-15 13:48:02 +08:00
其实爬虫没用.因为没啥值得爬的.
droiz
2019-10-15 13:50:12 +08:00
做爬虫也得有点道德啊,把人家打死了,追究起来你跑不了的
taogen
2019-10-15 14:11:38 +08:00
不是做爬虫的,只是一个后端 CRUD boy。最近学了一些爬虫相关知识,今天脑子里突然想到这个问题,所以发帖讨论一下,只是想加深一下理解。

感觉某些人很排斥,不过,谢谢大家的法律提醒。
lishunan246
2019-10-15 14:19:11 +08:00
这种搞法一般叫压力测试。
taogen
2019-10-15 14:26:44 +08:00
@lishunan246 #15 只是讨论的是客户端网络 IO 性能,不涉及服务端
484A4B
2019-10-15 15:04:37 +08:00
一般是用进程+协程比较好
进程数量一般是 N+1,N 是 CPU 线程数
协程数量根据 CPU 性能,几十到几百不等
taogen
2019-10-15 15:13:46 +08:00
@484A4B #17 多谢大佬提出具体参数。其实讨论方法和原理就够了。再次感谢

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

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

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

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

© 2021 V2EX