Asyncio连接到套接字意外失败

时间:2019-04-27 10:56:45

标签: python-3.x python-asyncio

我正在尝试使用以下代码通过whois查找约10,000个域。

async def lookup(server, port, query, sema):
    async with sema as sema:
        try:
            reader, writer = await asyncio.open_connection(server, port)
        except:
            return {}
        writer.write(query.encode("ISO-8859-1"))
        await writer.drain()
        data = b""
        while True:
            d = await reader.read(4096)
            if not d:
                break
            data += d
        writer.close()
        data = data.decode("ISO-8859-1")
        return data

但是,我反复遇到错误“连接失败”。如果我尝试一次查找,则将通过检查,这意味着Whois服务器已启动。我还将ulimit增加到10,000,但每次使用信号灯的查询次数都只能限制为1000。

1 个答案:

答案 0 :(得分:1)

whois服务器几乎肯定会限制您的速率。并非所有的whois服务器都可以从单个IP地址扩展到1000个并发连接。

进一步限制您的速率,降低信号量限制或切换到leaky bucket rate limiter

或者,找到一个提供更高查询率选项或者更好地支持批量查询的whois API提供程序。