首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用aiohttp处理DNS超时?

如何使用aiohttp处理DNS超时?
EN

Stack Overflow用户
提问于 2016-01-09 23:46:22
回答 1查看 1.5K关注 0票数 4

aiohttp自述说:

如果您想对aiohttp客户端使用超时,请使用标准异步方法: asyncio.wait_for(client.get(url),10)

但这并不能处理DNS超时,我猜这是由操作系统处理的。另外,with aiohttp.Timeout不处理OS查找。

异步回购上进行了讨论,没有最后的结论,而Saghul已经做出了奥登,但是我不知道如何将它混合到aiohttp中,以及这是否允许asyncio.wait_for功能。

Testcase (在我的linux机器上花费20秒):

代码语言:javascript
复制
async def fetch(url):
    url = 'http://alicebluejewelers.com/'
    with aiohttp.Timeout(0.001):
        resp = await aiohttp.get(url)
EN

回答 1

Stack Overflow用户

发布于 2016-01-10 03:12:05

Timeout按预期工作,但不幸的是,您的示例挂起了python关机过程:它等待后台线程的终止,后者执行DNS查找。

作为一种解决方案,我可以建议使用aiodns进行手动IP解析:

代码语言:javascript
复制
import asyncio
import aiohttp
import aiodns

async def fetch():
    dns = 'alicebluejewelers.com'
    # dns = 'google.com'
    with aiohttp.Timeout(1):
        ips = await resolver.query(dns, 'A')
        print(ips)
        url = 'http://{}/'.format(ips[0].host)
        async with aiohttp.get(url) as resp:
            print(resp.status)

loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)
loop.run_until_complete(fetch())

可能有必要将解决方案作为可选特性包含到TCPConnector中。

欢迎拉出请求!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34700311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档