Aiohttp 请求未成功时尝试

GoT*_*eep 5 python aiohttp

我有那个代码

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)
Run Code Online (Sandbox Code Playgroud)

我想在结果良好时发出请求,但如果我编译它,有时结果是“无”。怎么让它变得更好。

hoe*_*ing 3

我用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())
Run Code Online (Sandbox Code Playgroud)