イベントループとタスク | asyncioの利用 | Python本格超入門

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

イベントループとタスク

Pythonの非同期処理において、asyncioモジュールは重要な役割を果たします。asyncioの核となるのは「イベントループ」と「タスク」です。イベントループは、非同期タスクをスケジューリングし、それらのタスクが実行されるのを管理する役割を担います。ここでは、イベントループとタスクの基本操作について解説します。

イベントループの概要

イベントループは、複数の非同期タスクを管理し、次にどのタスクを実行すべきかを決定します。Pythonでは、asyncio.run()asyncio.get_event_loop()を使ってイベントループを起動します。

import asyncio

async def say_hello():
    print("Hello, world!")
    await asyncio.sleep(1)
    print("Goodbye, world!")

# イベントループの実行
asyncio.run(say_hello())

この例では、say_helloという非同期関数を定義し、asyncio.run()を使ってイベントループ上で実行しています。await asyncio.sleep(1)は、1秒間タスクを待機させる非同期処理です。

タスクの作成

非同期処理の複数のタスクを並行して実行するには、asyncio.create_task()を使ってタスクを生成します。複数のタスクを同時に管理することができます。

import asyncio

async def say_hello():
    print("Hello, world!")
    await asyncio.sleep(1)
    print("Goodbye, world!")

async def main():
    # 2つのタスクを並行して実行
    task1 = asyncio.create_task(say_hello())
    task2 = asyncio.create_task(say_hello())

    # タスクの完了を待機
    await task1
    await task2

# イベントループの実行
asyncio.run(main())

ここでは、2つのsay_helloタスクをasyncio.create_task()で作成し、それらを並行して実行しています。イベントループはこれらのタスクを管理し、並行して処理を進めます。

イベントループの手動操作

高度な非同期処理では、イベントループを手動で操作することができます。asyncio.get_event_loop()を使って現在のイベントループを取得し、タスクをスケジューリングして実行します。

import asyncio

async def say_hello():
    print("Hello, world!")
    await asyncio.sleep(1)
    print("Goodbye, world!")

loop = asyncio.get_event_loop()

# タスクの作成
task = loop.create_task(say_hello())

# イベントループの実行
loop.run_until_complete(task)

# イベントループの終了
loop.close()

この例では、loop.create_task()でタスクを作成し、loop.run_until_complete()でそのタスクが完了するまでイベントループを実行しています。手動でイベントループを操作することで、より細かい制御が可能になります。

まとめ

Pythonの非同期処理において、イベントループとタスクは重要な役割を果たします。イベントループは複数の非同期タスクを効率的に管理し、タスクの実行をスケジューリングします。asyncio.run()を使って簡単にイベントループを実行でき、複数のタスクをasyncio.create_task()で並行して管理できます。また、get_event_loop()を使ってイベントループを手動で操作することも可能です。これにより、より効率的な並行処理が実現します。

Amazonロゴ
   
ad.価格範囲を指定して商品を探せます。セールで助かる便利ツール
本格超入門
スポンサーリンク
このページをメモ、または、シェア