Il asyncio
documentation copre le differenze:
classe asyncio.Future(*, loop=None)
Questa classe è quasi compatibile con concurrent.futures.Future
.
Differenze:
result()
e exception()
non prendono un argomento timeout e sollevano un'eccezione quando il futuro non è ancora finito.
- Le chiamate registrate con
add_done_callback()
vengono sempre richiamate tramite il ciclo degli eventi call_soon_threadsafe()
.
- Questa classe non è compatibile con le funzioni
wait()
e as_completed()
nel pacchetto concurrent.futures
.
Questa classe non è thread-safe.
In sostanza, se si sta utilizzando ThreadPoolExecutor
o ProcessPoolExecutor
, o si desidera utilizzare un Future
direttamente per la concorrenza thread-based o basato sui processi, utilizzare concurrent.futures.Future
. Se si utilizza asyncio
, utilizzare asyncio.Future
.
Quindi non è thread-safe, a meno che non si usi 'add_done_callback()'? – sargas
'asyncio.Future' non è sicuro per i thread - è progettato solo per essere utilizzato in un'applicazione basata su asyncio a thread singolo. Se vuoi chiamare un metodo su "asyncio.Future" da un thread esterno al thread del ciclo degli eventi, devi usare 'loop.call_soon_threadsafe'. – dano