У меня есть фрагмент кода, который проверяет, размещают ли домены из списка веб-сайт или нет.
Я выполняю 100 параллельных задач, которые используют домены из очереди.
Проблема, с которой я сталкиваюсь, заключается в том, что я получаю ложноотрицательные ошибки Cannot connect to host
на некоторых доменах, в то время как одни и те же домены могут фактически выдавать действительный 200
ответ HTTP при индивидуальной обработке с использованием точно такого же кода.версия кода, которую я использую для фактического вызова:
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)
(PingResult
и classify_exception
, headers
, timeout
определены вне).
I 'используя uvloop
и aiodns
и запуская его в Ubuntu 18.04.
Есть ли причина, по которой этот код должен работать нормально при выполнении в одиночку, но иногда не работает с Cannot connect to host
при запуске в нескольких задачах?