0

asyncio.gather的文档说

如果 return_exceptions 为 False(默认值),则第一个引发的异常会立即传播到在 gather() 上等待的任务。aws 序列中的其他等待对象不会被取消,并将继续运行。

async def fetch(url):
    async with aiohttp.ClientSession() as s:
        async with s.get(url) as resp:
            resp.raise_for_status()
            return await resp.text()

urls = ["https://google.com", "https://google.com/non-existent"]
try:
    results = await asyncio.gather(*[asyncio.create_task(fetch(url)) for url in urls])
except Exception as e:
    print(e)

我运行上面的代码没有任何东西绑定到results变量,因为其中一项任务引发了异常。我不明白该文档,它说如果return_exceptions=True,则异常被收集,如果是False,则第一个引发的异常被传播到任务,其他等待对象继续运行。我希望引发 excpetion 的任务不会出现在 collect 中results,但是NameError当我尝试获得成功任务的结果时,我得到了。

4

0 回答 0