Python 爬虫并发极限是多少呢?

查看 330|回复 25
qsnow6   
提供一个数据,python 爬虫框架的扛把子,scrapy,每秒并发可以达到 1800 request /s
binux   
@qsnow6 #10 开 HTTPS 开 gzip 就卡死了
RicardoY   
@qsnow6 这是怎么测出来的,scrapy bench 只能跑到 2400min/s 左右
qsnow6   
@RicardoY #12 不好意思,敲错了,单位是 min
lithbitren   
我用 grequests 单线程最快每秒可以发 500-700 个 request,还没算上多进程,一次性可以同时建立数万的个协程请求,尤其找到一些复杂点的 API,没有保护的话必崩,同事里的个人几乎都被干崩过。
不过最近遇到一次严重的内存泄漏也是因为 grequests 的 gevent 给搞得,开了 20 万个协程,等了几分钟,直接爆了个 memory error,然后可能是 c 扩展里面的内存没有释放,程序炸了,idle 关了,内存占用率都还在 95%以上,开流氓工具清内存都清不掉,最后只能重启。
Cy86
OP
  
@qsnow6 好吧... 我用协成单进程 9410min/s
Cy86
OP
  
@lithbitren 目前用 grequests 能达到 13377min/s 但 timeout 的几率有点大, 很难控制在百分之 98 以下, 我再研究研究
Cy86
OP
  
目前猜测是运营商的限制, 偶尔能突破 500 限制, 但阿里云和国外 VPS 测试依旧并发不满意, 服务器端可能是网络抖动的原因
目前:
国外: VPS 测试代理 IP 端口是否开放,过滤一波虚假的
家里: 单线程 异步 每秒 400 并发来使用, 3 秒能测试 1200 个代理 IP(GET 国内匿名测试服务器), 准确率达到百分之 98+%
lithbitren   
@Cy86 外网 grequests 我这边最多也就射出秒均 200-300 这样,任何做过保护的网站都会秒封 IP,只要设了 timeout 怎么都会被短暂阻塞,我测的是自己搭的本地服务框架,算上回收处理时间是 500-700,其实应该算成服务器秒内处理请求数。单纯的看发射的话,本地的秒均单进程应该可以达到 900 多,刚刚测了 1000 个请求,服务器日志的的请求间隔是 1.1 秒这样。其实对于小服务器来说,做好保护的话最多是带宽资源占用导致其他人无法正常使用服务,但也不是这么好崩的。
black11black   
@lithbitren 建议补习基础知识....想异步爬虫就好好原生异步,不要猴子补丁....select 机能限制就这么高性能啊,我猜测 select 限制是因为 select 默认 512fd,正好符合了你说的超 500 不稳定,有问题上 epoll 啊,我又不知道你代码怎么写的,纯粹瞎猜。py 原生异步切换携程的时间消耗是微秒级的,合理配置后可以到纳秒级,十万并发不好说,网络状况合适的条件下单线程一万肯定能达到,你这么低性能都出问题明显是网络问题或者代码写的有问题。。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部