Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ コルーチンの作成と実行 | Asynchronous Programming
Python構造化プログラミング

コルーチンの作成と実行

メニューを表示するにはスワイプしてください

Pythonで非同期プログラミングを始めるには、コルーチンについて理解する必要があります。コルーチンは、async defで定義される特別な関数です。コルーチンを使うことで、実行を一時停止および再開できるため、ファイルの読み込み、ネットワークリクエスト、データベースクエリなどの入出力操作を、プログラム全体をブロックせずに処理できます。これにより、あるタスクがデータを待っている間も他のタスクが実行され、効率と応答性が向上します。

コルーチンを実行するには、asyncio.runを使用します。これはイベントループを開始し、コルーチンを実行し、終了時にループを閉じます。これは現代のPythonで非同期コードを起動する標準的な方法です。

複数のコルーチンを同時に実行したい場合は、asyncio.gatherを使って同時にスケジューリングできます。これにより、複数のタスクを開始し、すべての完了を待つことができ、特にI/Oのような遅い操作を待つ際に時間を有効活用できます。

以下のコードは、これらの概念を示しています。

import asyncio

async def greet(name, delay):
    await asyncio.sleep(delay)
    print(f"Hello, {name}!")

async def main():
    # Schedule two coroutines to run concurrently
    await asyncio.gather(
        greet("Alice", 2),
        greet("Bob", 1)
    )

asyncio.run(main())

期待される結果:

Hello, Bob!
Hello, Alice!

Bobの挨拶が先に表示されるのは、Aliceよりも短い遅延(1秒)を使用しているためです(Aliceは2秒)。

greetコルーチンはasync defで作成され、await asyncio.sleep(delay)によって実行を一時停止し、挨拶を出力します。mainコルーチンは、2秒の遅延で「Alice」、1秒の遅延で「Bob」という2つのgreetインスタンスをasyncio.gatherでスケジューリングします。これにより、両方の挨拶が同時に処理され、プログラムは一方の終了を待たずにもう一方を開始します。最後に、asyncio.run(main())がイベントループを開始し、mainコルーチンを実行し、すべての後処理を行います。この方法により、ネットワークリクエストや時間待ちなどの待機を伴う複数のタスクを同時に処理でき、プログラムの効率と応答性が向上します。

question mark

asyncio.gatherがコルーチンをどのようにスケジューリングするかを最もよく表している説明はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  2
some-alt