並列処理を作った時にeventとwaitのこともちょっと確認した。
eventとwaitを使えば、自分の好きなところで処理を待機させ、好きなタイミングで実行処理に入ることができる。これは便利だ。
最初は理解不能…かと思ったけど、1つずつ処理を見ていったらそうでもなかった。
基本的な流れが分かるようにここに整理しておこう。
# =================================== # 【備考】:2つのタスクを並列処理 # 【備考】:eventによる待機処理 # =================================== from threading import (Event, Thread) import time #---------------------------- # 1 eventのインスタンス event1 = Event() event2 = Event() #---------------------------- def func1(): # 4-2 スレッドにより実行 print("func1-1 executed") # 4-3 待機(イベント発生まで) # 5-2 実行(イベント発生後に) event1.wait() print("func1-2 executed") def func2(): # 4-2 スレッドにより実行 print("func2-1 executed") # 4-3 待機(イベント発生まで) # 7-2 実行(イベント発生後に) event2.wait() print("func2-2 executed") #---------------------------- # 2 スレッドに関数をセット print("thread1,2 set") thread1 = Thread(target=func1) thread2 = Thread(target=func2) # 3 スレッドを開始 print("thread1,2 start") thread1.start() thread2.start() # 4 ちょっと待機 print("sleep 3sec") time.sleep(3) # 5 イベントを発生させる print("event1set") event1.set() # 6 ちょっと待機 print("sleep 3sec") time.sleep(3) # 7 イベントを発生させる print("event2set") event2.set() # 8 終了待ち合わせする thread1.join() thread2.join() print("ALL process end") #---------------------------- input()
最後の8の待ち合わせのjoinだけど、これを入れないとprint("ALL process end")の処理が先に始まってしまい、func2処理がその次になる…という変な順番になる。改めて待ち合わせ処理のjoinは大事だな~と思う。
◆ラズパイの並列処理はこちら