![](/img/trans.png)
[英]Python3 and asyncio: how to implement websocket server as asyncio instance?
[英]How to handle error raise - Asyncio in Python3
我有一個函數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 Exception,但是如果該功能是由 lib 提供的,這看起來很丑陋。
預先感謝您的幫助,
問題是有時
f()
會引發Exception
,我不確定如何處理。
這將取決於發生異常時您想做什么。 請記住, asyncio.gather()
是方便的 API,默認情況下會傳播異常,以避免出現錯誤時盲目繼續。 如果您想在異常情況下繼續,您還有其他選擇:
通過return_exceptions=True
來gather
- 這將導致gather
與其他結果一起返回異常對象。 方便易用,但將異常與常規結果混合在一起,有點混亂。
使用asyncio.wait()
而不是asyncio.gather()
。 它返回一組futures ,您可以測試每個futures是通過提高還是通過產生結果來完成的。
將f()
包裝在您自己的函數中,以根據您的需要捕獲異常。 您考慮並拒絕了這一點,但在某些情況下,這確實是正確的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.