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

30次阅读

共计 718 个字符,预计需要花费 2 分钟才能阅读完成。

模块介绍: 爬取网上很多公开的代理 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) 的策略呢,

正文完
 0