1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Event Busを作ってみよう version#1

Last updated at Posted at 2023-05-13

見た目

image.png

URL

GitHub: branch at "release/23-05-13"

元々の構想

やっていること

call_apps.py dummpy_trigger

  1. new_event_dirにイベント情報を個別のファイルとして追加

event_loop.py

  1. 初期化として、apps/内にある各アプリのトリガー情報を"registered_event/"内に1つのテキストファイルとして書き出し
  2. ループスタート
    1. "registerd_event/"内の最も新しいファイルを読み込んで、アプリを起動するキーワードを取得。
      ここで取得することで、外部からトリガー情報を更新できる-->event_loopを止めなくても新しいアプリを追加できる。
    2. "new_event_dir"内にあるイベント情報を順番にロード。
      1. イベント情報に含まれているキーワードを読み込む。
      2. キーワードに一致するアプリにイベント情報を丸投げ。処理方法は各アプリに任せる。
      3. ここまでで処理し終わったので、このイベント情報が入ったログファイルを"old_event_dir/"に移動。これで次の時には読み込まれない。
    3. 2.1.に戻る

この時点での構想

アルゴリズムイメージ

event_loop.pyのイメージ
image.png

image.png

ディレクトリ構造

event_bus/
|
|- event_loop.py
|- call_apps.py
|- <some other config>
|
|- apps/
    |- dummy_trigger.py
    |- print_event.py
    |- <other apps coming soon>
|
|- new_event_dir/
    |- 2023_05_14_10_21_19_704567_526212028_dummy_trigger.txt (サンプル)
    |- <other apps event coming soon>
|
|- old_event_dir/
    |- 2023_05_13_17_46_05_903853_210209713_dummy_trigger.txt (サンプル)
    |- 2023_05_13_17_46_06_616911_073043986_dummy_trigger.txt (サンプル)
    |- <other apps event coming soon>
|
|- registered_event/
    |- 2023_05_13_18_19_37_203768_158712787.csv (サンプル)
    |- 2023_05_13_18_22_37_302726_415965892.csv (サンプル)
    |- ...
|
|- src/
    |- get_random_int.py
    |- get_absolute_path.py
    |- <other common modules>
|

イベントファイルやトリガー情報ファイルの中身

イベントファイルの例: 2023_05_14_10_21_19_704567_526212028_dummy_trigger.txt

1684027279.704568
59944308
dummy
None

つまり、

  • timestamp: 1684027279.704568
  • random int: 59944308
  • category: dummy
  • path_to_data: None

トリガー情報ファイルの例: 2023_05_13_18_22_37_302726_415965892.csv

dummy_trigger,None
print_event,dummy

つまり、

  • dummy_trigger.pyは"None"というcategoryを持ったイベントが発生したときに呼び出す(Noneというcategoryは禁止ワードにするつもり)
  • print_eventは"dummy"というcategoryを持ったイベント(dummy_triggerがそのようなイベントを発生させる)が発生したときに呼び出される

TODO

  • event_loop内のメイン処理の、どのタイミングでイベントが追加される/トリガー情報ファイルが更新されるが起きると不具合が起きそうか整理
    • トリガー情報ファイルを読み込んだ後に、トリガー情報ファイルの更新とそれを前提にしたイベントが追加されると、そのイベントに対する処理は以前のトリガー情報ファイルに従うから、新しく作ったトリガー情報ファイルは適用されなくて、意図しない動作になる可能性がある
  • 複数のcategoryの登録を可能に
    • イベントファイルもトリガー情報ファイル(csvファイル)も
    • もっと発展すれば、categoryの組み合わせによる条件付けもしたい
      • この2つのcategoryを同時に持たないと起動しない
      • あるcategoryがあっても、他に抑制するcategoryがあったら起動しない
      • etc.
  • 各appを非同期処理に
    • イベント情報を引数にして渡して、app側でpath_to_dataをどう処理するかとか決めて、勝手にバックグラウンド処理するイメージ
    • 終了イベントを投げるかとかはapp次第
  • subscribe/unsubsribeの実装
    • トリガー情報ファイルの更新をapp側などから呼び出せるようにする
1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?