Проверяет понимание асинхронного программирования в Python и концепции Future как объекта, представляющего результат отложенной операции.
Future — это объект, который инкапсулирует асинхронное выполнение некоторой операции и предоставляет интерфейс для получения её результата, который может быть ещё не доступен в момент создания Future. Это ключевая абстракция для асинхронного программирования, позволяющая не блокировать поток выполнения, а продолжить работу, пока результат не будет готов.
Future используется в двух основных контекстах:
from concurrent.futures import ThreadPoolExecutor
import time
def heavy_task(n):
time.sleep(n)
return f"Task {n} done"
with ThreadPoolExecutor() as executor:
future = executor.submit(heavy_task, 2)
print("Task submitted, doing other work...")
result = future.result() # блокирует до получения результата
print(result)import asyncio
async def main():
loop = asyncio.get_running_loop()
future = loop.create_future()
# Имитация асинхронного результата
async def set_result():
await asyncio.sleep(1)
future.set_result("Future resolved!")
asyncio.create_task(set_result())
result = await future
print(result)
asyncio.run(main())Future — это фундаментальный строительный блок для асинхронного и параллельного программирования в Python. Его стоит применять, когда нужно выполнять длительные операции (сеть, ввод-вывод, вычисления) без блокировки основного потока, особенно в сочетании с пулами потоков или asyncio для создания отзывчивых и эффективных приложений.