前提
Pythonでプロセス間通信を非同期処理とイベントハンドラを用いて
コーディングしてみたのでコードレビューをして頂きたいです。
変数の扱い方やクラス設計の仕方など
どんなことでもいいのでアドバイスがあればお願いします。
動作
- mainはworker1のスレッドを走らせイベントが発生するのを待機する
- worker1の処理中にイベントを発生させ通知する
- mainはイベント通知を受け取り、worker2をスレッドで走らせる
※Workerが増えてもイベントが受け取れる作りにしています。
該当のソースコード
Python
1import threading 2import time 3 4#グローバル変数 5eventhandler = None 6 7class Main: 8 9 #Worker1をスレッドで走らせてイベント発生をひたすら待つ 10 def main(self): 11 event = threading.Event() 12 Worker1(event).start() 13 14 while True: 15 #イベントが発生するかを1秒間だけ待つ 16 event_is_set = event.wait(1) 17 18 #イベントが発生したらイベントハンドラをスレッドで実行 19 if event_is_set: 20 event.clear() 21 eventhandler.start() 22 23class Worker1(threading.Thread): 24 25 def __init__(self, event:threading.Event): 26 threading.Thread.__init__(self) 27 self.event = event 28 29 #override 30 def run(self): 31 for i in range(1,11): 32 print('Worker1 working: ' + str(i) +'[sec]') 33 #5秒たったらイベントを発生させイベントハンドラに格納 34 if i == 5: 35 print('event_set') 36 self.event.set() 37 global eventhandler 38 eventhandler = Worker2() 39 40 time.sleep(1) 41 42class Worker2(threading.Thread): 43 def __init__(self): 44 threading.Thread.__init__(self) 45 46 #override 47 def run(self): 48 for i in range(1,6): 49 print('Worker2 working: ' + str(i) +'[sec]') 50 time.sleep(1) 51 52if __name__ in '__main__': 53 Main().main()
出力
Worker1 working: 1[sec] Worker1 working: 2[sec] Worker1 working: 3[sec] Worker1 working: 4[sec] Worker1 working: 5[sec] event_set Worker2 working: 1[sec] Worker2 working: 2[sec] Worker1 working: 6[sec] Worker1 working: 7[sec] Worker2 working: 3[sec] Worker2 working: 4[sec] Worker1 working: 8[sec] Worker2 working: 5[sec] Worker1 working: 9[sec] Worker1 working: 10[sec]
補足情報(FW/ツールのバージョンなど)
Python 3.10
Windows 10
Visual Studio Code

回答1件
あなたの回答
tips
プレビュー