🙆‍♀️

【Python】asyncのついた関数をコールする

2023/07/08に公開

Pythonを勉強中のGoエンジニアです。
調べたことは記事にしていきますので、参考になれば嬉しいです。
(ChatGPTによる回答が含まれています)

疑問

asyncのついた関数をコールする方法を知りたい。

回答

非同期関数を呼び出すにはいくつかの方法があります。
以下の関数をもとに、コードを見ていきます。

async def hello():
    print('Hello ...')
    await asyncio.sleep(1)
    print('... World!')

1. awaitキーワードを使用する

非同期関数はawaitを前置して呼び出すことができます。
これは非同期関数の実行を一時的に停止し、制御をイベントループに戻します。非同期関数が終了すると、結果を返し、元の関数の実行を再開します。

async def main():
    await hello()

2. asyncio.create_task()を使用する

asyncio.create_task()は新たなタスクを作成し、そのタスクをイベントループにスケジュールします。これにより、非同期関数はすぐに開始され、制御はすぐに呼び出し元の関数に戻ります。

async def main():
    task = asyncio.create_task(hello())
    await task

3. asyncio.gather()を使用する

asyncio.gather()関数は複数の非同期タスクを並行に実行し、すべてのタスクが終了するのを待ちます。これは複数の非同期タスクを扱う場合に便利です。

async def main():
    await asyncio.gather(hello(), hello())

以上

Discussion