Pythonでasyncio.run()を効果的に使う方法

この記事では、Pythonでの非同期プログラミングにおける`asyncio.run()`の使用例について解説します。非同期プログラミングはI/O-boundな処理を効率よく行うための手法の一つですが、`asyncio.run()`はその核となる関数です。具体的なコード例とその解説、応用例を含めています。

目次

asyncio.run()とは?

`asyncio.run()`はPython標準ライブラリの一部であり、非同期プログラミングを手軽に扱うための関数です。この関数はPython3.7以降で使用できます。主にコルーチンオブジェクトを引数に取り、イベントループを作成して非同期処理を実行します。

基本的な使用方法

import asyncio

async def main():
    print("Hello")
    await asyncio.sleep(1)
    print("World")

# イベントループを作成してmainコルーチンを実行
asyncio.run(main())

この基本的な例では、`main`という名前の非同期関数(コルーチン)を定義しています。このコルーチン内で`print`と`await asyncio.sleep(1)`が非同期に実行されます。そして、`asyncio.run(main())`によってイベントループが作成され、`main`コルーチンが実行されます。

非同期処理の応用例

複数のコルーチンを同時に実行

import asyncio

async def worker(name, seconds):
    print(f"{name} started, will run for {seconds} seconds")
    await asyncio.sleep(seconds)
    print(f"{name} finished")

async def main():
    await asyncio.gather(
        worker("worker1", 2),
        worker("worker2", 1)
    )

asyncio.run(main())

この例では`worker`というコルーチンを定義しています。`main`コルーチン内で`asyncio.gather()`を用いて`worker1`と`worker2`を同時に実行しています。これにより、非同期で複数の処理を効率よく行えます。

非同期での例外処理

import asyncio

async def raise_exception():
    raise ValueError("This is an error")

async def main():
    try:
        await raise_exception()
    except ValueError as e:
        print(e)

asyncio.run(main())

この例では`raise_exception`コルーチンで例外を発生させています。`main`コルーチンでその例外をキャッチしています。非同期関数内での例外処理も通常のtry-except文で行えます。

まとめ

Pythonで非同期処理を行う際には、`asyncio.run()`が非常に便利な関数です。基本的な使い方から、複数のコルーチンを同時に実行する応用例、例外処理まで、様々な場面で使えます。非同期プログラミングの基本を理解するためにも、この関数の使い方をマスターすることは有用です。

コメント

コメントする

目次