asyncio は、Python バージョン 3.4 で導入された標準ライブラリであり、非同期 IO のサポートが組み込まれています。 asyncio のプログラミングモデルはメッセージループです。今日は、asyncio におけるコルーチンと Future オブジェクトの関係について詳しく説明しますresult = await future
result = await coroutine
です。関数を一時停止し、後で実行を再開することができます。一時停止期間中は、他のタスクに切り替えて実行を継続できます。 Javascript は、値が将来計算されるプレースホルダーです。上記の例では、ネットワーク IO 関数が完了するのを待っている間に、関数によってコンテナーが提供され、完了すると Promise がコンテナーに入力されます。
コールバック関数を使用して実際の結果を取得できます。
TaskオブジェクトはコルーチンとFutureを接続し、コルーチンをFutureオブジェクトにカプセル化するものです。通常、2種類のものが表示されます。メソッド、tasks = asyncio.gather(
asyncio.ensure_future(func1()),
asyncio.ensure_future(func2())
)
loop.run_until_complete(tasks)
tasks = [
asyncio.ensure_future(func1()),
asyncio.ensure_future(func2())
]
loop.run_until_complete(asyncio.wait(tasks))
run_until_completeは両方のFutureオブジェクトを受け取ることができます。コルーチン オブジェクト、BaseEventLoop.run_until_complete(future)
Run until the Future is done.
If the argument is a coroutine object, it is wrapped by ensure_future().
Return the Future's result, or raise its exception.
asyncio タスク ループで、CTRL-C を使用して終了すると、例外がキャッチされた場合でも、イベント ループ内のタスクは終了します。エラーを報告すると、次のエラーが発生します。
タスクは破棄されましたが、保留中です!
タスク: <タスク保留中 coro=for task in asyncio.Task.all_tasks(): task.cancel()
ただし、CTRL-C はイベント ループを停止するので、イベント ループを再起動する必要があります。try:
loop.run_until_complete(tasks)
except KeyboardInterrupt as e:
for task in asyncio.Task.all_tasks():
task.cancel()
loop.run_forever() # restart loop
finally:
loop.close()
asyncio.gather を使用できます。 (..., return_Exceptions=True)
例外を通常の結果の戻り値に変換します。
以上がasyncioでのコルーチンオブジェクトとFutureオブジェクトの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。