Постоянное DNS-кэширование не используется Python для socket.getaddrinfo / mercurial - PullRequest
4 голосов
/ 07 июля 2011

Раньше у меня был очень медленный поиск DNS на моей машине с Ubuntu при подключении через один модем / ISP. Я следовал инструкциям (таким как здесь ), чтобы использовать постоянное кэширование DNS, чтобы не повторять поиск DNS, и все стало намного быстрее. Тем не менее, я заметил, что при извлечении / переносе репозиториев на Mercurial было очень медленно даже передавать очень маленькие изменения. Посмотрев глубже, я обнаружил, что все время занималось _socket.getaddrinfo, то есть поисками DNS. Почему все веб-браузеры используют информацию из /etc/pdnsd.conf для использования старых поисков DNS, а сокеты питонов - нет. Как я могу заставить Mercurial использовать кэшированные запросы?

Обновление

Это также может быть связано с тем, что getaddrinfo пытается получить адреса ipv4 и ipv6 и возвращает ответ только после того, как ему не удается найти адрес ipv6. Я не уверен, как это проверить, то есть, из-за задержки из-за ipv6, непостоянства или из-за того и другого.

Обновление

Это может быть связано с запросами ipv6, как предлагается в ответе здесь , мне придется проверить это, как только я получу шанс.

Ответы [ 2 ]

1 голос
/ 18 мая 2013

Pythons socket.getaddrinfo () использует getaddrinfo () операционной системы (вместо libc).- Это никак не связано с Python .Если pdns уже настроен на включение в цепочку разрешений, то разные скорости разрешения зависят от разных запросов.- Посмотрите более внимательно на то, какие точные запросы getaddrinfo () являются быстрыми, которые являются медленными.

1 голос
/ 08 июля 2011

Благодаря этой записи в списке python, кажется, что если вы используете BIND, то getaddrinfo в python использует кэшированные DNS-запросы. После установки BIND и его запуска, повторный поиск DNS происходит мгновенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...