見た目
URL
GitHub: branch at "release/23-05-13"
元々の構想
やっていること
call_apps.py dummpy_trigger
- new_event_dirにイベント情報を個別のファイルとして追加
event_loop.py
- 初期化として、apps/内にある各アプリのトリガー情報を"registered_event/"内に1つのテキストファイルとして書き出し
- ループスタート
- "registerd_event/"内の最も新しいファイルを読み込んで、アプリを起動するキーワードを取得。
ここで取得することで、外部からトリガー情報を更新できる-->event_loopを止めなくても新しいアプリを追加できる。 - "new_event_dir"内にあるイベント情報を順番にロード。
- イベント情報に含まれているキーワードを読み込む。
- キーワードに一致するアプリにイベント情報を丸投げ。処理方法は各アプリに任せる。
- ここまでで処理し終わったので、このイベント情報が入ったログファイルを"old_event_dir/"に移動。これで次の時には読み込まれない。
- 2.1.に戻る
- "registerd_event/"内の最も新しいファイルを読み込んで、アプリを起動するキーワードを取得。
この時点での構想
アルゴリズムイメージ
ディレクトリ構造
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側などから呼び出せるようにする