私はpython並行性について学び、先物の概念を紹介しました。as_completed()
は先物の反復可能性を取り、それらが完了するとそれらを生成することを読みました。
内部でどのように機能するのか知りたいです。完了したタスク(将来)をすぐに生成しますか?素朴なアプローチは、すべての先物を繰り返し、done()
を使用してすべての先物を調べることですが、これは非効率的です。
では、この関数の背後にある魔法は何ですか?
ありがとう!
内部でどのように機能するのか知りたいです。
as_completed
は、先物が完了したときに起動するコールバックを設定し、受信するすべての先物に対して起動します。 (この目的のために add_done_callback
と同等の内部APIを使用します。)先物のいずれかが完了すると、as_completed
はコールバックが実行されていることによって通知されます。コールバックは、将来完了したスレッドで実行されるため、すべてのコールバックで共有され、as_completed
がスリープする event のみを設定します。イベントによって目覚めたら、as_completed
はすぐに完成した未来を生み出します。これは、as_completed
が、先物が発生する順序に関係なく、完了時に先物が確実に生成されるようにする方法です。譲歩後、イベントはクリアされ、すべての先物が完了するまで待機が繰り返されます。
完了したタスク(将来)をすぐに生成しますか?
はい、それは 文書化されたインターフェース と 実装 の両方から続きます。