CodeGym /課程 /Python SELF TW /Future類別

Future類別

Python SELF TW
等級 26 , 課堂 1
開放

8.1 Future類別的基本特性

Module asyncioFuture類別是一個 將來會可用的非同步操作結果。 Future物件用於管理非同步任務的狀態和結果。

Future類別的基本特性

Future物件是一個容器,用來容納在任務完成執行後才能可用的結果。它提供了 獲取非同步操作完成後的結果或例外情況的接口。

創建和管理Future物件

  • 創建: 通常使用loop.create_future()創建。
  • 設置結果: 使用方法set_result(result)設置結果。
  • 設置例外: 使用方法set_exception(exception)設置例外。

主要方法和屬性

set_result(result):

設置Future物件的結果。所有等待此物件的協程將立即以此結果恢復。

set_exception(exception):

設置Future物件的例外。所有等待此物件的協程將立即以此例外恢復。

result():

如果結果可用,返回Future物件的結果。如果操作以例外結束,將引發該例外。

exception():

如果已設置,返回例外,或者None,如果Future物件尚未完成或成功完成。

done():

如果Future物件完成(有結果或例外),返回True

add_done_callback(callback):

Future物件完成時,添加將被調用的回調。

8.2 使用範例

設置和獲取結果


import asyncio

async def set_future_result(fut, delay):
    await asyncio.sleep(delay)
    fut.set_result("Future result is ready")
            
async def main():
    loop = asyncio.get_running_loop()
    fut = loop.create_future()
    asyncio.create_task(set_future_result(fut, 2))
    result = await fut
    print(result)
            
asyncio.run(main())

處理例外


import asyncio

async def set_future_exception(fut, delay):
    await asyncio.sleep(delay)
    fut.set_exception(ValueError("An error occurred"))
            
async def main():
    loop = asyncio.get_running_loop()
    fut = loop.create_future()
    asyncio.create_task(set_future_exception(fut, 2))
    try:
        result = await fut
    except ValueError as e:
        print(f"Caught an exception: {e}")

asyncio.run(main())

與任務交互

Future物件通常與(Tasks)任務結合使用。當使用asyncio.create_task()創建任務時,它會自動 創建Future物件,可用於追踪和管理任務的狀態。


import asyncio

async def example_coroutine():
    await asyncio.sleep(1)
    return "Task result"
            
async def main():
    task = asyncio.create_task(example_coroutine())
    print(await task)
            
asyncio.run(main())

8.3 優勢和特性

Future物件允許管理非同步操作的結果和例外,提供了 執行的靈活性和控制。Future可以在多種非同步編程場景中使用, 包括任務、計時器、回調等等。

Future物件通常與(Tasks)任務結合使用。這種方法允許更高層次的控制 於非同步操作的執行和狀態。

限制

在某些情況下,Future的使用可能比使用更高層次的抽象(如(Tasks)任務或協程)更為複雜。使用Future可能 需要更多的手動管理非同步操作的狀態和結果。

2
任務
Python SELF TW, 等級 26, 課堂 1
上鎖
使用 Future 物件
使用 Future 物件
2
任務
Python SELF TW, 等級 26, 課堂 1
上鎖
處理 Future 異常
處理 Future 異常
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION