PythonでsleepしているThreadを呼び起こすプラクティス

Python
スポンサーリンク

Pythonのsleep中のThreadをWake up

PythonのThreadにて、RubyのThreadのwakeupメソッドに等しいことを実装したかったのですが、wakeup的なメソッドは存在しない模様。

というわけで、別の方法を探していたところ、Eventのwaitを使えばほぼ等しい機能が実装できるようです。

サンプルプログラム

import time
import threading

def thread_target(event):
    while True:
        if event.wait(10):
            print "Thread is waked up!"
            return

ev = threading.Event()
t = threading.Thread(target=thread_target, args=(ev,))
t.start()
time.sleep(5)
ev.set()
t.join()

 

Event.waitを使えば、確かにtime.sleepと等しい機能が実装できますし、必要となれば外部スレッドからEvent.setしてやればsleep状態から復帰します。便利ですね!外部からのスレッドの終了処理なんかの実装にはEventを使うのがベストみたいです。

余談

ブログにできそうな発見や学習はいくつもあるのですが、シストレの開発のほうがとても忙しいためなかなか更新ができておりません。 orz シストレのほうは、最近は成績がさほど悪くないので、今年の分を食いつなぐのは問題がなさそう。転職活動のほうは、一社に絞ってレスポンスを待っている状態で、そこがなかったら取り敢えずは頑張っては探さない方向になりそうです。日進月歩で頑張っております!

コメント

タイトルとURLをコピーしました