Pythonでasyncとawaitキーワードを使用し非同期関数を別の非同期関数から呼び出す

スポンサーリンク

Pythonでasyncとawaitキーワードを使用し非同期関数を別の非同期関数から呼び出してみます。

■今回の環境(Python)

今回のPythonはバージョン3.8.5を用いる。(Mac OS)

■asyncとawaitキーワードを使用し非同期関数を別の非同期関数から呼び出す

では、早速asyncとawaitキーワードを使用し非同期関数を別の非同期関数から呼び出すためのスクリプトを書いていきます。

■コード

import asyncio

# 非同期関数
async def async_function():
    print("処理1")
    await asyncio.sleep(1)
    print("処理2")

# メイン関数
async def main():
    print("開始")
    await async_function()
    print("終了")

# イベントループの作成
loop = asyncio.get_event_loop()

# メイン関数の実行
loop.run_until_complete(main())

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

まずimportでasyncioを呼び出します。その後、async_function()を定義します。async_function()は非同期関数として定義されています。この非同期関数では「処理1」というメッセージがprint()で出力されます。出力後、await asyncio.sleep(1)により、1秒の非同期待機が行われます。その後、「処理2」というメッセージがprint()で出力されます。次にmain()の定義します。main()も非同期関数として定義されています。この非同期関数では「開始」というメッセージがprint()で出力されます。await async_function()により、async_function()の完了を待機します。待機後、「終了」というメッセージがprint()で出力されます。次にイベントループの作成。asyncio.get_event_loop()により、イベントループが作成されます。作成後、メイン関数の実行。loop.run_until_complete(main())により、main()関数の実行が開始されます。main()関数内の処理が順番に実行されます。順番に実行されている中でawait async_function()により、async_function()の実行が開始されます。async_function()内の処理が順番に実行されます。await asyncio.sleep(1)により、1秒の非同期待機が行われます。行われた後、async_function()内の残りの処理が実行されます。async_function()の実行が完了した後、制御がmain()関数に戻ります。戻った後にprint(“終了”)というメッセージがprint()で出力されます。次にイベントループの終了。loop.close()により、イベントループが終了されます。

■実行・検証

このスクリプトを「test_fun.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、ターミナルから実行してみます。

実行してみると、非同期関数を別の非同期関数から呼び出し、関数の処理の実行結果の出力と、非同期処理のフロー、制御の流れを確認することができました。

コメント

タイトルとURLをコピーしました