【问题标题】:Windows DNS problem with Python socket.getaddrinfo()Python socket.getaddrinfo() 的 Windows DNS 问题
【发布时间】:2020-04-23 13:24:31
【问题描述】:

我的 Python 脚本存在 DNS 问题,但我的 Windows 10 桌面上的网络工具或浏览器没有。

每个网络请求运行我的脚本至少需要 5-10 秒。使用带有 --idle 标志的 py-spy 进行分析,将 socket.getaddrinfo() 标识为花费最多时间的函数。我在 Python REPL 中使用以下命令进行了测试:

socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)

返回大约需要 5-10 秒。在我的活动网络接口中设置固定 DNS 服务器确实改变了任何事情。

重新启动可解决问题并将响应时间降低到第二次以下。但是在让计算机运行几天后,问题又回来了。

看起来 socket.getaddrinfo 遇到了一些超时,然后使用正确的 DNS 解析。

nslookup 工作得很好。以毫秒为单位的响应时间。在浏览器中上网也可以正常工作。

有什么我可以开始挖掘的想法吗?

【问题讨论】:

    标签: python-3.x windows dns


    【解决方案1】:

    你想完成什么? 将域名解析为 IP 地址?

    1. 只需尝试: socket.gethostbyname("example.com")

    2. 检查配置了哪些 dns 服务器(在 cmd-ipconfig /all,DNS 服务器类别中)。

    3. 尝试使用适当的 python DNS 客户端,看看问题是否仍然存在。 例如dnspython

    (看到这个答案 - Socket resolve DNS with specific DNS server)

    【讨论】:

    • 抱歉回复晚了。感谢您的建议。它是我使用的 Shopify REST API 客户端库的一部分。我无法在那里更改代码。我在 Windows、Mac OS X 和 Linux 上使用该库。仅在 Windows 上,在正常运行数天后才会出现问题。也许偶尔重启是可行的方法,不值得进一步追查。
    猜你喜欢
    • 2011-09-30
    • 2011-02-03
    • 2015-06-24
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多