Добрый день.
Есть задача заглянуть скриптом в большое количество ссылок. Всё бы ничего, но некоторый домены не удаётся разрешить в адрес. В этом случае скрипт долго-долго ждёт ответ сервера.
Как бы мне сделать так, чтоб ждал он сильно поменьше?
Беглое гугление не дало решения.
Пилится всё на третьем Питоне, используется urllib3, домена резолвлю при помощи socket.gethostbyname.
Да, думаю в этом направлении. Но тут явно есть тормоз в виде днс-резолвера, да при асинхроной работе оно будет менее заметно, но от этого оно никуда не денется.
Действительно, gethostbyname (как и getaddrinfo, через который он реализован) не дает никакой возможности задавать таймаут. Все, что остается - это распараллеливать работу через потоки (threading) или через gevent (в документации есть хороший пример параллельного резолвинга имен).
И да, забыл. По делу: кэширующий ДНС - хорошо, да. Но сильно непортабельно.
Хочется закинуть поделку на машину, да так, чтоб дополнительно ничего не ставить.
Буду пилить в сторону асинхронности, многопоточноси, счастья всем даром и пусть никто не уйдёт обиженным.
Всем спасибо, помогли.
В общем, резюмирую:
комрад lega изложил то, о чём я сам и думал и, более того, дал дельную ссылку. nirvimel дал ту же полезную ссылку и подтвердил инфу он влиянии settimeout (Спойлер: влияет НИКАК). sim3x подсказал идею со своим ДНС-сервером. Оставлю про запас.