Mediumconcurrent-futures

Что такое concurrent.futures?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

concurrent.futures (Python 3.2) — high-level API для асинхронного выполнения. Два executor'а: ThreadPoolExecutor (потоки), ProcessPoolExecutor (процессы). Одинаковый интерфейс.

from concurrent.futures import ThreadPoolExecutor, as_completed

with ThreadPoolExecutor(max_workers=4) as ex:
    # submit + as_completed — обработка в порядке завершения
    futures = [ex.submit(fetch_url, url) for url in urls]
    for f in as_completed(futures):
        print(f.result())   # готовый результат

    # map — ordered results, блокирует до всех
    results = list(ex.map(fetch_url, urls))
  • Future.result(timeout) — блокирует, exception(), add_done_callback(fn);
  • ProcessPoolExecutor — для CPU-bound, использует multiprocessing под капотом (pickle);
  • submit + as_completed — для порядка завершения; map — для ordered;
  • asyncio.run_in_executor(loop, executor, func) — bridge между async и sync.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.