Python的socket.getaddrinfo / mercurial未使用持久性DNS缓存

我曾经在我的Ubuntu机器上通过一个调制解调器/ ISP连接时进行非常慢的DNS查找.我按照说明(例如那些
here)使用持久性DNS缓存,因此我不会重复进行DNS查找,一切都变得更快.然而,我注意到,当在mercurial上拉/推repos时,甚至转移非常小的变化都是非常缓慢的.更深入地看,我发现始终是_socket.getaddrinfo,即DNS查找.为什么即使所有Web浏览器都使用/etc/pdnsd.conf中的信息来使用旧的dns查找,pythons套接字也不会.如何使用缓存查找获得mercurial?

更新

这可能也是因为getaddrinfo尝试同时获取ipv4和ipv6地址,并且只有在找不到ipv6地址后才返回答案.我不知道如何检查这一点,即延迟是由于ipv6,非持久性还是两者兼而有之.

更新

它可能与ipv6请求有关,正如答案here中所建议的那样,一旦我有机会,我将不得不检查一下.

最佳答案 感谢python列表中的这个
post,看起来如果你使用BIND,那么python的getaddrinfo使用缓存的DNS查找.安装BIND并启动它后,重复的DNS查找是即时的.

点赞