Класс Future

Модуль 1: Python Core
14 уровень , 7 лекция
Открыта

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():

Возвращает True, если объект Future завершён (с результатом или исключением).

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
Задача
Модуль 1: Python Core, 14 уровень, 7 лекция
Недоступна
Использование объекта Future
Использование объекта Future
2
Задача
Модуль 1: Python Core, 14 уровень, 7 лекция
Недоступна
Обработка исключений Future
Обработка исключений Future
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ioanna Polyak Уровень 64
1 сентября 2025
О я 2 KPYTO
Андрей Уровень 60
26 сентября 2024
Коду не хватает комментариев