【Python】asyncioとは?意味をわかりやすく簡単に解説

【Python】asyncioとは?意味をわかりやすく簡単に解説

公開: 更新:


asyncioとは

asyncioはPythonの標準ライブラリで、非同期プログラミングを実現するためのモジュールです。コルーチンを使用して、I/O処理や時間のかかるタスクを効率的に処理できます。asyncioを利用することで、シングルスレッドでも複数のタスクを同時に実行する並行処理が可能になります。

asyncioの中核となるのは、イベントループと呼ばれる仕組みです。イベントループはタスクのスケジューリングと実行を管理し、非同期処理の制御を行います。コルーチンは「async def」キーワードで定義され、「await」キーワードを使って他のコルーチンを呼び出すことができるのです。

asyncioを使用することで、ネットワーク通信やファイルI/Oなどの時間のかかる処理を効率的に実行できます。また、asyncioは他の非同期フレームワークとの互換性も高く、aiohttp や asyncpg などのライブラリと組み合わせて使用することも可能なのです。

「Python」を学べるコードキャンプのサービス

asyncioの基本的な使い方と応用

asyncioの基本的な使い方と応用に関して、以下3つを簡単に解説していきます。

  1. コルーチンの定義と実行方法
  2. タスクの並行処理と制御
  3. 非同期コンテキストマネージャの活用

コルーチンの定義と実行方法

asyncioでコルーチンを定義するには、関数の前に「async def」キーワードを使用します。コルーチン内では「await」キーワードを使って、他の非同期関数や操作の完了を待つことができます。コルーチンの実行には、asyncio.run()関数を使用するのが一般的な方法です。

import asyncio

async def hello_world():
    await asyncio.sleep(1)
    return "Hello, World!"

async def main():
    result = await hello_world()
    print(result)

asyncio.run(main())

このコードでは、hello_world()コルーチンを定義し、1秒間のスリープ後に文字列を返します。main()コルーチン内でhello_world()を呼び出し、その結果を出力しています。asyncio.run()関数を使用してメインコルーチンを実行することで、非同期処理が開始されるのです。

コルーチンは通常の関数とは異なり、呼び出されても即座に実行されません。代わりに、コルーチンオブジェクトが返されます。このオブジェクトは、イベントループによってスケジューリングされ、適切なタイミングで実行されるのです。

おすすめのPython研修一覧

Python研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Python研修の一覧を見る

おすすめのDX研修一覧

DX研修を提供しているおすすめの企業・法人を一覧で掲載しております。

DX研修の一覧を見る

おすすめのJava研修一覧

Java研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Java研修の一覧を見る

おすすめのJavaScript研修一覧

JavaScript研修を提供しているおすすめの企業・法人を一覧で掲載しております。

JavaScript研修の一覧を見る

タスクの並行処理と制御

asyncioを使用すると、複数のタスクを並行して実行できます。タスクはコルーチンをラップしたオブジェクトで、asyncio.create_task()関数を使用して作成します。複数のタスクを同時に実行し、その結果を待つには、asyncio.gather()関数が便利です。

import asyncio

async def task(name, delay):
    await asyncio.sleep(delay)
    return f"{name} completed after {delay} seconds"

async def main():
    task1 = asyncio.create_task(task("Task 1", 2))
    task2 = asyncio.create_task(task("Task 2", 1))
    results = await asyncio.gather(task1, task2)
    for result in results:
        print(result)

asyncio.run(main())

このコードでは、2つのタスクを作成し、異なる遅延時間を設定しています。asyncio.gather()を使用して両方のタスクの完了を待ち、結果を出力しています。タスクは並行して実行されるため、合計の実行時間は個々のタスクの最大遅延時間に近くなります。

タスクの制御には、asyncio.wait()関数やasyncio.as_completed()関数も使用できます。これらの関数を使うと、タスクの一部が完了するまで待機したり、完了したタスクから順に結果を取得したりすることが可能になるのです。

非同期コンテキストマネージャの活用

asyncioは非同期コンテキストマネージャをサポートしており、リソースの効率的な管理が可能です。非同期コンテキストマネージャは、「async with」を使用して実装します。これにより、リソースの獲得と解放を非同期的に実行できるのです。

import asyncio

class AsyncContextManager:
    async def __aenter__(self):
        print("Entering context")
        await asyncio.sleep(1)
        return self

    async def __aexit__(self, exc_type, exc_value, traceback):
        print("Exiting context")
        await asyncio.sleep(1)

async def main():
    async with AsyncContextManager() as manager:
        print("Inside context")

asyncio.run(main())

このコードでは、AsyncContextManagerクラスを定義し、__aenter__()と__aexit__()メソッドを実装しています。これらのメソッドは非同期的に実行され、コンテキストの開始と終了時に1秒間のスリープを行います。main()関数内で「async with」文を使用してコンテキストマネージャを使用しています。

非同期コンテキストマネージャは、データベース接続やネットワークリソースの管理など、非同期的なリソース操作が必要な場面で特に有用です。リソースの獲得と解放を自動化することで、コードの可読性が向上し、リソースリークのリスクも軽減できるのです。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する