gpt4 book ai didi

python - 如何处理错误引发 - Python3 中的 Asyncio

转载 作者:行者123 更新时间:2023-12-01 08:28:55 25 4
gpt4 key购买 nike

我有一个函数 f() 可以进行 API 调用,我想异步调用它多次。我像这样使用 asyncio lib:

async def main():
loop = asyncio.get_event_loop()
futures = [loop.run_in_executor(None, f) for i in range(10)]
await asyncio.gather(*futures)
return futures

result = asyncio.get_event_loop().run_until_complete(main())

问题是有时 f() 会引发 Exception 并且我不知道如何处理它。文档说 Futures 可以包含 Exception,但这里的情况并非如此,会引发错误并且程序崩溃。

我该如何实现这一目标?我想我可以为 f()try: catch: 异常编写一个包装器,但如果该功能是由库提供的,那么这看起来很难看。

提前感谢您的帮助,

最佳答案

The problem is that sometimes f() raises an Exception and I'm not sure how to handle it.

这取决于发生异常时您想要执行的操作。请记住,asyncio.gather() 是一种方便的 API,默认情况下会传播异常,以避免在出现错误时盲目继续。如果您想要在出现异常时继续,您还有其他选择:

  • return_exceptions=True 传递给 gather - 这将导致 gather 返回异常对象以及其他结果。方便易用,但是将异常结果与常规结果混合在一起,有点乱。

  • 使用asyncio.wait()而不是asyncio.gather()。它返回一组 future ,您可以测试每个 future 是否通过提高或产生结果来完成。

  • f() 封装在您自己的函数中,以捕获您认为合适的异常。您考虑过并拒绝了这一点,但在某些情况下这正是正确的方法。

关于python - 如何处理错误引发 - Python3 中的 Asyncio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com