簡體   English   中英

如何處理錯誤提升 - Python3 中的 Asyncio

[英]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=Truegather - 這將導致gather與其他結果一起返回異常對象。 方便易用,但將異常與常規結果混合在一起,有點混亂。

  • 使用asyncio.wait()而不是asyncio.gather() 它返回一組futures ,您可以測試每個futures是通過提高還是通過產生結果來完成的。

  • f()包裝在您自己的函數中,以根據您的需要捕獲異常。 您考慮並拒絕了這一點,但在某些情況下,這確實是正確的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM