В чем разница между concurrent.futures и asyncio.futures?

Чтобы прояснить причину этого вопроса:

  • Сложно использовать два модуля с тем же именем. Что они представляют, что делает их отличными?

  • Какие задачи можно решить, другие не могут и наоборот?

Ответы

Ответ 1

Документация asyncio описывает различия:

class asyncio.Future(*, loop=None)

Этот класс почти совместим с concurrent.futures.Future.

Отличия:

  • result() и exception() не принимают аргумент тайм-аута и создают исключение, когда будущее еще не выполнено.
  • Обратные вызовы, зарегистрированные с помощью add_done_callback(), всегда вызываются через циклы событий call_soon_threadsafe().
  • Этот класс не совместим с функциями wait() и as_completed() в пакете concurrent.futures.

Этот класс не является потокобезопасным.

В принципе, если вы используете ThreadPoolExecutor или ProcessPoolExecutor или хотите использовать Future напрямую для concurrency на основе потоков или процессов, используйте concurrent.futures.Future. Если вы используете asyncio, используйте asyncio.Future.

Ответ 2

Из docs:

[asyncio предоставляет] будущий класс, который имитирует тот, который находится в модуле concurrent.futures, но адаптирован для использования с циклом события;