Python中的socket.getaddrinfo是否使用缓存?

问题描述 投票:0回答:1

我的应用程序执行许多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 sockets tornado
1个回答
0
投票

Python没有自己的DNS缓存;每次都会调用getaddrinfo。操作系统是否缓存对getaddrinfo的调用,取决于许多因素。上次查看此内容时通常不是默认情况,但这是几年前的事了。安装dnsmasq是(曾经是)获得系统范围的DNS缓存(了解并遵守TTL等)的最简单方法。

© www.soinside.com 2019 - 2024. All rights reserved.