asyncio和aiohttp“无法连接到主机”

时间:2018-09-27 08:13:35

标签: python python-3.6 python-asyncio aiohttp

我有一段代码可以检查列表中的域是否托管网站。

我正在运行100个并行任务,这些任务会消耗队列中的域。

我面临的问题是,在某些域上我得到了假的负错误Cannot connect to host,而当使用完全相同的代码分别处理时,相同的域实际上可能会产生有效的200 HTTP响应。 / p>

这是我用来进行实际调用的代码的清理版本:

def get_session():
    connector = aiohttp.TCPConnector(ssl=False, family=socket.AF_INET, resolver=aiohttp.AsyncResolver(timeout=5))
    return aiohttp.ClientSession(connector=connector)

async def ping(url, session):
    result = PingResult()

    try:
        async with session.get(url, timeout=timeout, headers=headers) as r:
            result.status_code = r.status
            result.redirect = r.headers['location'] if 'location' in r.headers else None
    except BaseException as e:
        result.exception = classify_exception(e)
    return result

调用它时,它将获取get_session()返回的会话作为参数(所有任务共享同一个会话,我使用一个会话/ URL尝试了它,但是没有用):

async with get_session() as session:
    await ping(url, session)

({{1}和PingResultclassify_exceptionheaders在外部定义)。

我正在使用timeoutuvloop,并在Ubuntu 18.04上运行它。

为什么有这样的代码,当单独执行时该代码应该可以正常运行,但是在多个任务中运行时有时会失败aiodns

0 个答案:

没有答案