Die beiden Klassen stellen ausgezeichnete Abstraktionen für die gleichzeitige Programmierung dar, daher ist es ein wenig beunruhigend, dass sie nicht dieselbe API unterstützen.Warum ist asyncio.Future mit concurrent.futures.Future inkompatibel?
Insbesondere nach dem docs:
asyncio.Future
ist fast mitconcurrent.futures.Future
kompatibel.Unterschiede:
result()
undexception()
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 Ereignisschleifecall_soon_threadsafe()
aufgerufen.- Diese Klasse ist nicht mit den Funktionen
wait()
undas_completed()
imconcurrent.futures
-Paket kompatibel.
Die obige Liste ist tatsächlich unvollständig, es gibt ein paar Unterschiede:
running()
Methode fehltresult()
undexception()
InvalidStateError
erhöhen kann, wenn zu früh genannt
Sind diese aufgrund der inhärenten Natur einer Ereignisschleife, die diese Operationen entweder nutzlos oder zu umständlich zu implementieren macht?
Und was ist die Bedeutung des Unterschieds bezogen auf add_done_callback()
? Wie auch immer, der Callback wird garantiert zu irgendeiner unbestimmten Zeit nach dem Abschluss der Futures ausgeführt, also ist es nicht vollkommen konsistent zwischen den beiden Klassen?