Aiohttp попробуйте, пока запрос не увенчался успехом - PullRequest
1 голос
/ 26 апреля 2020

У меня есть этот код

async with aiohttp.ClientSession() as session:
    content = 'none'
    while content == 'none':
        try:
            async with session.get(url) as resp:
                resp.raise_for_status()
                content = await resp.json()
        except aiohttp.ClientError:
            await asyncio.sleep(1)
        except Exception as e:
            print(e)
            await asyncio.sleep(1)

Я хочу сделать запрос, пока результат хорош, но если я скомпилирую это, иногда результатом будет 'none'. Как сделать это лучше.

1 Ответ

1 голос
/ 27 апреля 2020

Я использую async-retrying для этого. Вы помечаете функцию запроса декоратором @retry, и она будет перезапущена, если возникнет исключение. Пример:

import asyncio
import aiohttp
from async_retrying import retry


@retry(attempts=100)
async def req(session, url):
    async with session.get(url) as resp:
        resp.raise_for_status()
        return await resp.json()


async def main():
    async with aiohttp.ClientSession() as session:
        payload = await req(session, "http://eu.httpbin.org/get")
        print("payload received:", payload)


if __name__ == "__main__":
    asyncio.run(main())
...