いくつかのasyncio
関数に少し混乱しています。コルーチンをスケジュールする BaseEventLoop.create_task(coro)
関数があるようです。 _create_task
_のドキュメントには、その新しい関数と記載されているため、互換性のために asyncio.async(coro)
を使用する必要があります。これは、ドキュメントを再度参照すると asyncio.ensure_future(coro)
コルーチンの実行を再度スケジュールします。
その間、私は Task(coro)
を使用してコルーチンの実行をスケジュールしていますが、それもうまく機能しているようです。それで、これらすべての違いは何ですか?
お気づきのとおり、これらはすべて同じことを行います。
Python> = 3.5では、async
がキーワードになったため、asyncio.async
をasyncio.ensure_future
に置き換える必要がありました [1] 。
create_task
の存在理由 [2] :
サードパーティのイベントループは、相互運用性のためにTaskの独自のサブクラスを使用できます。この場合、結果のタイプはTaskのサブクラスです。
また、イベントループによって「タスク」の作成方法が異なる可能性があるため、Task
を直接作成しないことも意味します。
編集
別の重要なの違いは、コルーチンを受け入れることに加えて、ensure_future
は待機可能なオブジェクトも受け入れることです。一方、create_task
はコルーチンのみを受け入れます。