前提
Pythonでプロセス間通信を非同期処理とイベントハンドラを用いて
コーディングしてみたのでコードレビューをして頂きたいです。
変数の扱い方やクラス設計の仕方など
どんなことでもいいのでアドバイスがあればお願いします。
動作
- mainはworker1のスレッドを走らせイベントが発生するのを待機する
- worker1の処理中にイベントを発生させ通知する
- mainはイベント通知を受け取り、worker2をスレッドで走らせる
※Workerが増えてもイベントが受け取れる作りにしています。
該当のソースコード
Python
import threading import time #グローバル変数 eventhandler = None class Main: #Worker1をスレッドで走らせてイベント発生をひたすら待つ def main(self): event = threading.Event() Worker1(event).start() while True: #イベントが発生するかを1秒間だけ待つ event_is_set = event.wait(1) #イベントが発生したらイベントハンドラをスレッドで実行 if event_is_set: event.clear() eventhandler.start() class Worker1(threading.Thread): def __init__(self, event:threading.Event): threading.Thread.__init__(self) self.event = event #override def run(self): for i in range(1,11): print('Worker1 working: ' + str(i) +'[sec]') #5秒たったらイベントを発生させイベントハンドラに格納 if i == 5: print('event_set') self.event.set() global eventhandler eventhandler = Worker2() time.sleep(1) class Worker2(threading.Thread): def __init__(self): threading.Thread.__init__(self) #override def run(self): for i in range(1,6): print('Worker2 working: ' + str(i) +'[sec]') time.sleep(1) if __name__ in '__main__': 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
まだ回答がついていません
会員登録して回答してみよう