8.1 Future
클래스의 주요 특징
Future
클래스는 asyncio
모듈에서 비동기 작업의 결과를
나중에 사용할 수 있도록 하는 객체야.
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
객체는 종종 Tasks
와 함께 사용돼. 이 접근 방식은 비동기 작업의 실행과 상태에 대한 더 높은 수준의 제어를 제공해.
제한 사항
Future
를 사용하는 것은 Tasks
나 코루틴 같은
더 높은 수준의 추상화를 사용하는 것보다 더 복잡할 수 있어.
Future
를 사용할 때는 비동기 작업의 상태와 결과를 더 수동적으로 관리해야 할 수 있지.
GO TO FULL VERSION