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

标签 python sockets caching mercurial dns

过去,当通过一个调制解调器/ISP 连接时,我的 Ubuntu 机器上的 DNS 查找速度非常慢。我按照说明(例如那些 here )使用持久性 DNS 缓存,这样我就不会重复进行 DNS 查找,一切都变得更快了。但是,我注意到在 Mercurial 上拉/推 repos 时,即使传输非常小的更改也非常缓慢。深入观察,我发现所有时间都被 _socket.getaddrinfo 占用了,即 DNS 查找。为什么即使所有网络浏览器都使用 /etc/pdnsd.conf 中的信息来使用旧的 dns 查找,pythons 套接字却没有。我怎样才能让 Mercurial 使用缓存查找?

更新

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

更新

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

最佳答案

多亏了这个post在 python 列表上,似乎如果你使用 BIND,那么 python 的 getaddrinfo 使用缓存的 DNS 查找。安装并启动 BIND 后,重复的 DNS 查找是即时的。

关于python - Python 的 socket.getaddrinfo/mercurial 未使用持久性 DNS 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605154/

相关文章:

Python 2.7 pip UnicodeDecodeError

python - VSCode PyLint 未检测到我的 Python DTO 类成员

c - tcp 聊天客户端中的同步

apache - 如何使用 .htaccess 禁用代理缓存

caching - Grails-全页缓存

python - sklearn MultinomialNB 如何在类里面找到最有区别的词

python - 列表项中的结束文字 block

c - FTP 程序,客户端请求服务器上的文件

python-3.x - ZeroMQ永久拉线 socket

java - 将 WebView 页面保存到缓存