我有一段代码可以检查列表中的域是否托管网站。
我正在运行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}和PingResult
,classify_exception
,headers
在外部定义)。
我正在使用timeout
和uvloop
,并在Ubuntu 18.04上运行它。
为什么有这样的代码,当单独执行时该代码应该可以正常运行,但是在多个任务中运行时有时会失败aiodns
?