asyncio и aiohttp "Не удается подключиться к хосту" - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть фрагмент кода, который проверяет, размещают ли домены из списка веб-сайт или нет.

Я выполняю 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 при запуске в нескольких задачах?

...