模块介绍: 爬取网上很多公开的代理 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)的策略呢,
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.