python python-3.x module python-asyncio concurrent.futures

python - ¿Cuál es la diferencia entre concurrent.futures y asyncio.futures?



python-3.x module (2)

De los docs :

[ asyncio proporciona una] Clase futura que imita la del módulo concurrent.futures, pero adaptada para su uso con el bucle de eventos;

Para aclarar el motivo de esta pregunta:

  1. Es confuso usar dos módulos con el mismo nombre. ¿Qué representan ellos que los hace distintos?

  2. ¿Qué tarea (s) puede uno resolver que el otro no puede y viceversa?


La documentación de asyncio cubre las diferencias:

clase asyncio.Future(*, loop=None)

Esta clase es casi compatible con concurrent.futures.Future .

Diferencias

  • result() y exception() no toman un argumento de tiempo de espera y generan una excepción cuando el futuro aún no está terminado.
  • Las devoluciones de add_done_callback() registradas con add_done_callback() siempre se llaman a través del bucle de eventos call_soon_threadsafe() .
  • Esta clase no es compatible con las funciones wait() y as_completed() en el paquete concurrent.futures .

Esta clase no es segura para subprocesos.

Básicamente, si está utilizando ThreadPoolExecutor o ProcessPoolExecutor , o si desea usar un Future directamente para la concurrencia basada en subprocesos o en procesos, use concurrent.futures.Future . Si está usando asyncio , use asyncio.Future .