この記事について
この記事はこんな人におすすめです!
- 非同期処理についてあまり知らない人
- 初心者の人
- なんとなく使っていて、意味まで分からない人
1.非同期処理って?
まず、非同期処理について少し知っておきましょう。
では、皆さんが今行っていることってどのくらいありますか?
- 呼吸をする
- 体温を維持する
- 心臓を動かす
結構ありますね。これら全て同時に行っていることじゃないですか?
この同時に行うことを非同期処理と言います。
2.普通にプログラムを書いてみよう
まずはこのプログラムを見てください。
import time
def do_kanji_homework():
print('Starting Kanji homework')
time.sleep(4) # 漢字をする
print('Kanji homework done')
def do_math_homework():
print('Starting Math homework')
time.sleep(2) # 算数をする
print('Math homework done')
def main():
do_kanji_homework()
do_math_homework()
main()
このプログラムは、漢字と算数の宿題をするプログラムです。
このプログラムを実行するとこうなります。
Starting Kanji homework
# 4秒後
Kanji homework done
Starting Math homework
# 2秒後
Math homework done
これでは、1度に1つしか宿題ができません。これでは非効率です!
1度に2つの宿題が出来たら、その分時間がかかりません。
ということで、asyncとawaitの出番です!
3.同時に宿題をしよう
早速、asyncとawaitを使ってみましょう。
後でちゃんと意味は解説するので、安心してください。
import asyncio
async def do_kanji_homework():
print('Starting Kanji homework')
await asyncio.sleep(4)
print('Kanji homework done')
async def do_math_homework():
print('Starting Math homework')
await asyncio.sleep(2)
print('Math homework done')
async def main():
await asyncio.gather(
do_kanji_homework(),
do_math_homework()
)
asyncio.run(main())
色々増えましたが、これを実行すると...
Starting Kanji homework
Starting Math homework
# 2秒後
Math homework done
# さらに2秒後
Kanji homework done
なんと宿題を2つ同時に開始し、4秒で全て終わらせることができました!
4.解説
asyncio
非同期処理をするためのライブラリです。
asyncio.sleep
time.sleep()
の非同期バージョンだと思ってください。
asyncio.gather
非同期関数を同時に開始する。
さっきの例だと、do_kanji_homework
とdo_math_homework
を
同時に開始しています。
asyncio.run
main関数を実行するための物。
asyncとawait
async
非同期関数の頭につける物。
漢字、算数の宿題をする関数とmain関数に使われている。
await
非同期関数の中で非同期にしたい物の頭につける。
漢字、算数の宿題ならasyncio.sleep
に、
mainならasyncio.gather
。
おわり
非同期処理やasync、awaitについての理解は深まりましたか?
非同期処理はプログラムの中でも重要なもので、
覚えておくととても便利です。
この記事を読んでも分からなかったなら、
実際に記事に書かれていたコードを実行してみたり、
自分なりに変えてみたりすると意味が分かるかもしれません。
最後まで読んでいただきありがとうございます。
コメント、いいねしてくれると励みになります