Работа с aiohttp session.get () время ожидания проблемы для большого количества запросов - PullRequest
0 голосов
/ 14 апреля 2020

Я изо всех сил пытаюсь найти много документации по aiohttp , особенно недавнюю. Я продолжаю просматривать одни и те же несколько страниц снова и снова, в основном проблемы с github и документацию, и не могу найти ключ к моей проблеме.

Проблема заключается в том, что при выполнении большого количества запросов ожидающие один тайм-аут, прежде чем они будут отправлены.

Это связано с тем, что для запроса ( session.get () ) по умолчанию установлено время ожидания 5 минут, которое отсчитывается с момента ожидания сделано, а не фактический запрос, если я хорошо понимаю. Таким образом, я заблокирован, потому что если оставить фиксированный тайм-аут, то все ожидающие запросы будут отменены (timeout) после этого времени или если timeout установлен на Нет заставит программу ждать бесконечно на не отвечающих сайтах. Та же проблема возникает в этой проблеме , но я не могу обойти ее.

Вот мой ошибочный код:

async def request(session, url):
    try:
        resp = await session.get(url)
    except:
        "FAIL"
    else:
        "SUCCESS"

async def session():
    urls = loadUrls()
    coros = []
    async with aiohttp.ClientSession() as session:
        for url in urls:
            coros.append(request(session, url))
        await asyncio.gather(*coros, return_exceptions=True)

def main():
    loop = asyncio.new_event_loop()
    loop.run_until_complete((session()))
    loop.close()

Я пытался установить ограничение TCPConnector = Нет, но безуспешно.

Я видел, как некоторые люди говорили об использовании asyncio.wait вместо asyncio.gather, но, как и в проблеме 3203, показанной выше, безуспешно.

Я пытался установить ClientSession для каждого запроса, но безуспешно, но это может быть из-за моего непонимания.

Спасибо за ваше руководство.

...