The asyncio
documentation obejmuje różnice:
klasa asyncio.Future(*, loop=None)
Ta klasa jest prawie zgodny z concurrent.futures.Future
.
Różnice:
result()
i exception()
nie przyjmują argument limitu czasu i podnieść wyjątek, gdy przyszłość nie jest jeszcze zrobione.
- Połączenia zwrotne zarejestrowane pod numerem
add_done_callback()
są zawsze wywoływane za pośrednictwem pętli zdarzeń call_soon_threadsafe()
.
- Ta klasa nie jest zgodna z funkcjami
wait()
i as_completed()
w pakiecie concurrent.futures
.
Ta klasa nie jest bezpieczna dla wątków.
Zasadniczo, jeśli używasz ThreadPoolExecutor
lub ProcessPoolExecutor
, lub chcą używać Future
bezpośrednio do współbieżności wątku opartych lub procesowego opartego używać concurrent.futures.Future
. Jeśli używasz asyncio
, użyj asyncio.Future
.
Więc to nie jest wątek bezpieczny, chyba że używasz 'add_done_callback()'? – sargas
'asyncio.Future' nie jest w ogóle bezpieczny dla wątków - jest przeznaczony tylko do stosowania w jednowątkowej aplikacji opartej na" asyncio ". Jeśli chcesz wywołać metodę na 'asyncio.Future' z wątku poza wątkiem pętli zdarzeń, musisz użyć' loop.call_soon_threadsafe'. – dano