web-dev-qa-db-ja.com

コンカレント.futuresとasyncio.futuresの違いは何ですか?

この質問の理由を明らかにするには:

  1. 同じ名前の2つのモジュールを使用すると混乱します。それらを区別するためにそれらは何を表していますか?

  2. 一方が解決できるタスクと他方が解決できないタスク、またはその逆のタスクは何ですか?

30
sargas

asyncio documentation は違いをカバーしています:

クラスasyncio.Future(*, loop=None)

このクラスは_concurrent.futures.Future_とほぼ互換性があります。

違い:

  • result()exception()はタイムアウト引数を取りません。将来がまだ完了していない場合は、例外が発生します。
  • add_done_callback()で登録されたコールバックは、常にイベントループのcall_soon_threadsafe()を介して呼び出されます。
  • このクラスは、_concurrent.futures_パッケージのwait()およびas_completed()関数と互換性がありません。

このクラスはスレッドセーフではありません。

基本的に、ThreadPoolExecutorまたはProcessPoolExecutorを使用している場合、またはスレッドベースまたはプロセスベースの同時実行性のためにFutureを直接使用する場合は、_concurrent.futures.Future_を使用します。 asyncioを使用している場合は、_asyncio.Future_を使用します。

16
dano

docs から:

[asyncioは] concurrent.futuresモジュールのクラスを模倣するが、イベントループでの使用に適合したfutureクラスを提供します。

2
chepner