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