CodeGym /Java Course /Python SELF KO /Future 클래스

Future 클래스

Python SELF KO
레벨 26 , 레슨 1
사용 가능

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를 사용할 때는 비동기 작업의 상태와 결과를 더 수동적으로 관리해야 할 수 있지.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION