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

查看 280|回复 25
作者:Cy86   
模块介绍: 爬取网上很多公开的代理 IP 网址, HTTP HTTPS Sock5 , 去重后, 访问自己域名(返回 Json, 小于 300 字节), 用来测试匿名程度后保存
  不使用代理,仅本地网络测试
  设备:  联通光纤宽带(我一个人用) 下行 300M 上行 30    CPU: I7 7700HQ 4 核 8 逻辑处理器 内存: 16G
  国内的服务器: 阿里云  1 核 2 内  1M
  单进程 + 异步:
      URL 500 个
      asyncio.Semaphore(500)   
      aiohttp 设置超时时间为 1 秒
  结果: 并发 500 的成功率为 97%左右(偶尔抽风)
      每秒并发个数: 485
  多进程 + 异步:
      URL 500 个
      5 个进程 (每个进程平均 100 个 URL)
      asyncio.Semaphore(100)   
      aiohttp 设置超时时间为 1 秒
  结果:并发 500 的成功率为 99%左右(偶尔抽风)
      每秒并发个数: 495
  多进程 + 异步:
      URL 1600 个
      8 个进程 (每个进程平均 200 个 URL)
      asyncio.Semaphore(200)   
      aiohttp 设置超时时间为 1 秒
  结果:并发 1600 的成功率为 4% ~ 75%左右(大概率低于 30%)
      每秒并发个数: 64 ~ 1200
当前遇到的问题:
超过 500 并发后极其不稳定
  目前猜测之所以 500 是临界点, 可能联通限制连接数 1000 导致 或是  Windows 平台 select 限制
当前策略每三秒对所有 代理 IP 访问自己服务器进行测试 测试代理 IP 超时时间为 3 秒 通过超时次数,和响应时间(使用) 对每个 IP 分配权重来筛选,排序, 所以要很大程度上减少自身网络或程序的错误, 才尽可能保证代理 IP 的准确性于可用性, 毕竟能用的 IP 太少, 误封就太可惜了
  电脑性能和上行带宽没跑满, 多加几个服务器太浪费了
请问各位, 有什么方式能提高并发量, 或容错(误封可用 IP)的策略呢,

并发, url, 进程, asyncio

chizuo   
你这个明显少了。我之前写了个爬虫 b 站排行榜的,多进程+异步 async+代理池,放到学校服务器上( 20c+48G),每秒并发可以轻松上千。不过持续不了多久,因为代理池太弱了,就会被封。
测试本地网页的话,应该能上万。
ClericPy   
并发极限没测过, 反正协程自己跑就挺快了, requests + 多线程大概比 httpx 协程慢个 10%, gevent 不测
Test without uvloop, 12 logical CPUs.
Windows-10-10.0.18362-SP0
3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
================================================================================
test_aiohttp(3.6.2) : 2000 / 2000 = 100.0%, cost 1.158s, 1727 qps, 100.0% standard.
test_httpx(0.11.1) : 2000 / 2000 = 100.0%, cost 3.927s, 509 qps, 29.47% standard.
Test with uvloop, 1 logical CPUs.
Linux-4.15.0-13-generic-x86_64-with-Ubuntu-18.04-bionic
3.7.3 (default, Apr 3 2019, 19:16:38)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
================================================================================
test_aiohttp(3.6.2) : 2000 / 2000 = 100.0%, cost 0.698s, 2866 qps, 100.0% standard.
test_httpx(0.11.1) : 2000 / 2000 = 100.0%, cost 2.337s, 856 qps, 29.87% standard.
以前随手测的, 请求本地 golang 只带 net/http 的 server
lc7029   
具体说是看你配置和网络
家用宽带可能有运营商的限制连接数或者 QOS
black11black   
很明显是你用 select 锁 512fd 的问题吧
lithbitren   
@black11black 大佬,select 锁怎么解啊?我最近试了试一个挺火的 py 新框架 fastAPI,据说 qps 能上万,结果本地拿并发爬虫一打就死了,win10 上开服务并发量不能超 510,一超就爆 select 错直接垮了,stackoverflow 和 github 都没找到解答。。
ericbize   
之前单位安全大佬写的 py 脚本 , 在 kvm 的 ubuntu 上面打了 12w 条连接,直接把单位的网卡死了。 背景,电信专线,固定 ip,100M
rockjike   
一般网站,爬虫并发多大会挂掉
opengps   
@ericbize 你们单位的网络设备支撑的在线连接数可能用满了,所以没有连接可用,表现成网络卡死。我当初 gps 系统上云是因为 5 万多买的硬件思科防火墙只能支撑 25 万 tcp 长连接
johnsona   
你先把反爬虫绕过去再说
您需要登录后才可以回帖 登录 | 立即注册

返回顶部