Pythonのasyncioを理解することについて解説しています。
Pythonのasyncioは、スレッドを使わずにPythonのコードを並行に書くための構造を提供する、コルーチンベースの並行処理モデルで、スレッドやマルチプロセッシングよりも軽量です。なお、コルーチンとは、処理を中断した後、続きから処理を再開できるプログラミングの構造の一種で、「asyncio」を直訳すると「非同期」という意味になる。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■実際にasyncio プログラムを作成する
では、Pythonのasyncioを理解するために、実際にasyncio プログラムを作成してみます。
■コード
import asyncio, time async def test_code(): print(time.ctime()) await asyncio.sleep(1.0) print(time.ctime()) asyncio.run(test_code())
今回のプログラムは、importでasyncioモジュールとtimeモジュールを呼び出します。その後、async defを用いて、test_code()という関数をコルーチンとして定義します。定義されたtest_code()が呼び出された時に実行される処理としては、time.ctime()を用いて現在の時刻を取得し、取得された時刻をprint()を用いて出力させるというものになります。そして、time.ctime()を用いる間で、await(待機)とasyncio.sleep()を用います。asyncio.sleep()は、asyncioモジュールによって提供されるコルーチンで、await(待機)を一緒に用いると、イベントループの制御を与えます。今回asyncio.sleep()の括弧内では、引数,パラメータとして「1.0」という値を渡し、1.0秒だけ遅延させます。
最後にasyncio.run()を用います。括弧内には引数,パラメータとして、test_code()というコルーチンを渡します。これでtest_code()が実行し、結果を返します。
■実行・検証
このプログラムを「async_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、今回定義したtest_code()という関数、コルーチンが実行され、1.0秒だけ遅延し、time.ctime()で現在の時刻を取得し、取得した時刻をprint()で出力させることができました。
コメント