You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DNSPython异步解析超时但同步解析正常,如何排查解决?

问题排查与解决方法

核心原因

dnspython 2.1.0版本在Windows 10平台存在异步UDP解析和默认ProactorEventLoop事件循环的兼容缺陷,同步解析走系统原生套接字逻辑不受该缺陷影响,因此会出现同步正常、异步超时的现象。

排查步骤

  • 首先测试强制TCP解析是否正常,执行代码:asyncio.run(resolver.resolve('www.google.com', tcp=True)),如果可以正常返回结果,即可确认是UDP兼容问题
  • 检查Python默认事件循环类型,执行代码打印当前循环:print(type(asyncio.get_event_loop_policy())),如果输出为<class 'asyncio.windows_events.WindowsProactorEventLoopPolicy'>,则匹配兼容问题场景

可用解决方案

  • 方案1:升级dnspython到2.3.0及以上版本,该版本已修复Windows平台异步解析的兼容问题,升级命令:
    pip install --upgrade dnspython
  • 方案2:如果无法升级依赖版本,手动切换Windows事件循环为Selector模式,在导入dns相关模块前执行以下代码:
import asyncio
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
  • 方案3:无需修改版本或事件循环,调用异步resolve时强制走TCP协议,代码示例:
import asyncio
from dns.asyncresolver import Resolver

resolver = Resolver()
resolver.nameservers = ['8.8.8.8']
asyncio.run(resolver.resolve('www.google.com', tcp=True))

内容的提问来源于stack exchange,提问作者Ξένη Γήινος

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:00