Mea*_*eet 6 python python-asyncio
我有一个f()进行 API 调用的函数,我想异步调用它多次。我asyncio这样使用库:
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())
Run Code Online (Sandbox Code Playgroud)
问题是有时f()会引发一个问题Exception,我不知道如何处理它。文档说Futures可以包含一个Exception,但这里的情况并非如此,会引发错误并且程序崩溃。
我该如何实现这一目标?我想我可以为f()和try: catch:Exception 编写一个包装器,但如果该功能是由库提供的,那看起来很丑陋。
预先感谢您的帮助,
use*_*342 11
问题是有时
f()会引发一个问题Exception,我不知道如何处理它。
这取决于发生异常时您想要执行的操作。请记住,这asyncio.gather()是默认情况下传播异常的便捷 API,以避免在发生错误时盲目继续。如果您想在异常情况下继续,您还有其他选择:
传递return_exceptions=True到gather- 这将导致gather返回异常对象以及其他结果。方便易用,但是将异常结果与常规结果混合在一起,有点乱。
使用asyncio.wait()而不是asyncio.gather(). 它返回一组future,您可以测试每个 future 是否通过提高或产生结果来完成。
包装f()在您自己的函数中,以捕获您认为合适的异常。您考虑并拒绝了这一点,但在某些情况下这正是正确的方法。
| 归档时间: |
|
| 查看次数: |
5138 次 |
| 最近记录: |