コンテンツにスキップ

asyncio

asyncio は I/O 操作(ファイル読み書き、ネットワーク通信、スリープ)の間に他の処理を並行できる。

asyncio はシングルスレッドで動作する。

I/O 操作を含まない処理は asyncio では向いていない。スリープなしの無限ループとかは threading でやること。

コルーチン

async defで定義した関数はコルーチンと呼ぶ。

コルーチンはasyncio.run(func())で呼ぶことができる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
async def example_coroutine():
    print("Start")
    await asyncio.sleep(1)  # 非同期で1秒待機
    print("End")

async def main():
    print("Hi")
    await asyncio.create_task(example_coroutine())
    print("Bye")

if __name__ == "__main__":
    # asyncioではトップレベルawaitは許可されていないため、main関数自体をコルーチン化する
    asyncio.run(main())
1
2
3
4
Hi
Start
End
Bye