Ayahuaska
@Ayahuaska
Хочу знать всё.

Таймаут DNS запроса в Python: как уменьшить?

Добрый день.
Есть задача заглянуть скриптом в большое количество ссылок. Всё бы ничего, но некоторый домены не удаётся разрешить в адрес. В этом случае скрипт долго-долго ждёт ответ сервера.
Как бы мне сделать так, чтоб ждал он сильно поменьше?
Беглое гугление не дало решения.
Пилится всё на третьем Питоне, используется urllib3, домена резолвлю при помощи socket.gethostbyname.
  • Вопрос задан
  • 623 просмотра
Решения вопроса 1
@lega
Есть задача заглянуть скриптом в большое количество ссылок.
Используйте асинхронные фреймворки для этого.

Вот пример на gevent, параллельно (куча корутин) с таймаутом www.gevent.org/intro.html#example
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@nirvimel
Действительно, gethostbyname (как и getaddrinfo, через который он реализован) не дает никакой возможности задавать таймаут. Все, что остается - это распараллеливать работу через потоки (threading) или через gevent (в документации есть хороший пример параллельного резолвинга имен).
Ответ написан
sim3x
@sim3x
https://docs.python.org/3/library/socket.html#sock...

поставь себе на хост кеширующий днс
таймаут поставь на 5-10 сек
паралелить парсер просто обязательно в любом случае
Ответ написан
Ayahuaska
@Ayahuaska Автор вопроса
Хочу знать всё.
В общем, резюмирую:
комрад lega изложил то, о чём я сам и думал и, более того, дал дельную ссылку.
nirvimel дал ту же полезную ссылку и подтвердил инфу он влиянии settimeout (Спойлер: влияет НИКАК).
sim3x подсказал идею со своим ДНС-сервером. Оставлю про запас.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы