Python 3.x 异步IO连接到套接字意外失败

Python 3.x 异步IO连接到套接字意外失败,python-3.x,python-asyncio,Python 3.x,Python Asyncio,我正试图通过whois使用以下代码查找大约10000个域 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(qu

我正试图通过whois使用以下代码查找大约10000个域

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增加到了10000,但我将使用信号量一次只能查找1000次。

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

进一步限制速率,降低信号量限制或切换到


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

请不要使用一揽子异常处理程序。你在玩口袋妖怪,但你真的不想把它们都抓住。仅捕获特定的异常。因为您不想忽略
GeneratorExit
MemoryError
键盘中断
并假装它们是连接错误。您是否尝试过降低到whois服务器的连接数,从而降低信号量的限制?很可能whois服务器管理员不喜欢一次从一个IP地址连接1000个连接,并且限制您的速率?