この記事では、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()`が非常に便利な関数です。基本的な使い方から、複数のコルーチンを同時に実行する応用例、例外処理まで、様々な場面で使えます。非同期プログラミングの基本を理解するためにも、この関数の使い方をマスターすることは有用です。
コメント