我的应用程序执行许多RPC。并得到了一些DNS解决错误。我发现龙卷风AsyncHttpClient没有缓存dns结果,并每次都调用socket.getaddrinfo。
我找到了https://github.com/jayvdb/dns-cache之类的库
和类似的摘要
def _setDNSCache():
"""
Makes a cached version of socket._getaddrinfo to avoid subsequent DNS requests.
"""
def _getaddrinfo(*args, **kwargs):
if args in kb.cache:
return kb.cache[args]
else:
kb.cache[args] = socket._getaddrinfo(*args, **kwargs)
return kb.cache[args]
if not hasattr(socket, "_getaddrinfo"):
socket._getaddrinfo = socket.getaddrinfo
socket.getaddrinfo = _getaddrinfo
我应该使用应用程序层dns缓存库吗?
Python没有自己的DNS缓存;每次都会调用getaddrinfo
。操作系统是否缓存对getaddrinfo
的调用,取决于许多因素。上次查看此内容时通常不是默认情况,但这是几年前的事了。安装dnsmasq
是(曾经是)获得系统范围的DNS缓存(了解并遵守TTL等)的最简单方法。