Asyncio подключение к сокету неожиданно завершается неудачей - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь найти около 10000 доменов через whois со следующим кодом.

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 одновременно с семафором.

1 Ответ

1 голос
/ 27 апреля 2019

Whois-сервер почти наверняка ограничивает вас по скорости. Не все серверы Whois созданы для масштабирования до 1000 одновременных подключений с одного IP-адреса.

Ограничьте вашу скорость, уменьшите предел семафора или переключитесь на ограничитель скорости потока с утечкой .

Либо найдите поставщика API-интерфейса whois, который предлагает варианты с более высокой частотой запросов или, что еще лучше, поддерживает массовые запросы.

...