Die asyncio
documentation deckt die Unterschiede:
Klasse asyncio.Future(*, loop=None)
Diese Klasse ist fast mit concurrent.futures.Future
kompatibel.
Unterschiede:
result()
und exception()
Sie ein Timeout Argument nicht nehmen und eine Ausnahme auslösen, wenn die Zukunft noch nicht geschehen ist.
- Rückrufe, die mit
add_done_callback()
registriert sind, werden immer über die Ereignisschleife call_soon_threadsafe()
aufgerufen.
- Diese Klasse ist nicht mit den Funktionen
wait()
und as_completed()
im concurrent.futures
-Paket kompatibel.
Diese Klasse ist nicht threadsicher.
Grundsätzlich, wenn Sie ThreadPoolExecutor
oder ProcessPoolExecutor
verwenden, oder einen Future
direkt für Thread-basierte oder prozessbasierten Parallelität verwenden möchten, verwenden Sie concurrent.futures.Future
. Wenn Sie asyncio
verwenden, verwenden Sie asyncio.Future
.
Also ist es nicht threadsicher, es sei denn du benutzt 'add_done_callback()'? – sargas
'asyncio.Future' ist überhaupt nicht Thread-sicher - es wurde nur für die Verwendung in einer asyncio-basierten Single-Thread-Anwendung entwickelt. Wenn Sie eine Methode für 'asyncio.Future' von einem Thread außerhalb des Ereignis-Loop-Threads aufrufen möchten, müssen Sie' loop.call_soon_threadsafe' verwenden. – dano