RT 想问一下,关于爬虫效率的问题。
假设前提:
爬虫服务器:1. 单机。2. 网络 1000 Mpbs。3. 硬件( CPU,内存条,磁盘)当前市场高配水平。
目标网站服务器:1. 不限制 IP,不限访问频率。2. 无限的响应速度(高并发,低延迟)。
请问各位大佬,在上面的前提下,想要最大化爬虫的效率,有哪些优化措施?另外,是不是线程池大小越大越好?
1
xeaglex 2019-10-15 12:12:50 +08:00 via Android 1
尽量调大。CPU,硬盘 IO,网络 IO,三者之一跑满其一为止
|
2
wangyzj 2019-10-15 12:30:57 +08:00
把 CPU 干满
|
3
wangkai0351 2019-10-15 12:37:19 +08:00 1
我是外行不懂这个,爬虫应该是 IO 密集操作,多线程的异步搞了没有。
|
4
taogen OP @wangkai0351 #3 异步没有考虑到,等会研究一下。十分感谢~
|
5
ClericPy 2019-10-15 12:47:09 +08:00 1
以前在 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 并发, 性能一直是线程三倍以上 |
6
sadfQED2 2019-10-15 12:53:17 +08:00 via Android
这是什么网站这么好爬啊,另外,出租人道主义,别太过分吧,太过分别人加上验证码,加上 ip 限制,大家都加班
|
8
RicardoY 2019-10-15 13:27:14 +08:00 via Android 1
要上异步 io 的 如果希望效率好的话 scrapy 或者 pyspider 考虑一下
|
9
ddddad 2019-10-15 13:35:16 +08:00
跟 cpu 核数差不多就可以了,再多线程切换消耗比较大。影响因素也挺多的
ps:影响网站运行就违法了 |
10
lolizeppelin 2019-10-15 13:36:39 +08:00
要抓住重点,池不池不重要,核心是要跑满 cpu
但是要避免线程多了上下问切换是浪费掉的 因为 python 多线程是废的,根本不用考虑多线程, 协程+多进程就是 |
11
taogen OP @lolizeppelin #10 豁然开朗,多谢大佬指点
|
12
zjh6 2019-10-15 13:48:02 +08:00
其实爬虫没用.因为没啥值得爬的.
|
13
droiz 2019-10-15 13:50:12 +08:00 via iPhone
做爬虫也得有点道德啊,把人家打死了,追究起来你跑不了的
|
14
taogen OP 不是做爬虫的,只是一个后端 CRUD boy。最近学了一些爬虫相关知识,今天脑子里突然想到这个问题,所以发帖讨论一下,只是想加深一下理解。
感觉某些人很排斥,不过,谢谢大家的法律提醒。 |
15
lishunan246 2019-10-15 14:19:11 +08:00
这种搞法一般叫压力测试。
|
16
taogen OP @lishunan246 #15 只是讨论的是客户端网络 IO 性能,不涉及服务端
|
17
484A4B 2019-10-15 15:04:37 +08:00 1
一般是用进程+协程比较好
进程数量一般是 N+1,N 是 CPU 线程数 协程数量根据 CPU 性能,几十到几百不等 |