Python イベント ループ(Event Loop)を簡単に実装する

スポンサーリンク

Python イベント ループ(Event Loop)を簡単に実装してみます。

■イベント ループ(Event Loop)とは

イベント ループ(Event Loop)は、複数のタスク(仕切り,領域)を同時に実行できることを意味しています。つまり、それは「Concurrency(同時実行)」ということでもあります。なお、Pythonでは、「asyncio」という組み込みパッケージを用いることで、1つのスレッド(小さな一連の命令)を使ってタスクを同時進行させることが可能です。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■イベント ループ(Event Loop)を簡単に実装する

では、早速イベント ループ(Event Loop)を簡単に実装するために、スクリプトを書いていきます。

■コード

import asyncio

def hello_test(loop):
    print('こんにちは、世界')
    loop.stop()

loop = asyncio.get_event_loop()

loop.call_soon(hello_test, loop)

loop.run_forever()
loop.close()

今回はimportでasyncioモジュールを呼び出します。今回はdef文を用いてhello_testという関数を定義します。括弧内にはloopという引数,パラメータを設定します。設定後、この関数が呼び出された時に実行される処理を書いていきます。今回は、print()で日本語の文字列を出力させるという処理になり、最後にloop.stop()を用います。これでイベント ループを停止することができます。

関数を定義後、loopという変数を定義し、その中でasyncio.get_event_loop()を用います。これで現在のイベント ループを取得し、loop変数内に格納します。

格納後、loop変数に対してcall_soon()を用います。括弧内には引数,パラメータとして、hello_testとloopを渡します。これで、現在のイベント ループに、hello_test()関数が呼び出されるようにスケジュールします。そして、loop変数に対してrun_forever()を用います。これでloop.stop()が呼び出されるまでイベント ループが実行されるようになります。

最後に、loop変数に対してclose()を用います。これでイベントループを閉じます。

■実行・検証

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

実行してみると、今回def文を用いて定義したhello_testという関数をイベントループに設定し、イベントループを実行させ、hello_test()関数をスケジュール通り、呼び出すことができました。

■loop.stop()が存在しない場合

hello_test()関数をスケジュール通り、呼び出すことができましたが、関数内に記述したloop.stop()がない場合はどうなるのでしょうか。やってみます。

■コード

import asyncio

def hello_test(loop):
    print('こんにちは、世界')

loop = asyncio.get_event_loop()

loop.call_soon(hello_test, loop)

loop.run_forever()
loop.close()

上記のスクリプトを「loop_test_2.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

■実行・検証

実行してみると、コード内に記述したloop.run_forever()は、stop()が呼ばれるまで、イベントループを実行しますが、今回はコード内にstop()がないので、実行したままになり、イベントループを閉じることができない状態となることが確認できました。

コメント

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