時々ハングする機能があります。
通常はアラームを設定しますが、Windows を使用しているため使用できません。
これを回避する簡単な方法はありますか、または呼び出すスレッドを作成するだけtime.sleep()
ですか?
最も堅牢な解決策は、サブプロセスを使用してから、そのサブプロセスを強制終了することです。Python2.6 では、subprocess.Popen() に .kill() が追加されています。
あなたのスレッド化アプローチが期待どおりに機能するとは思いません。Thread オブジェクトへの参照を削除しても、スレッドは強制終了されません。代わりに、スレッドがウェイクアップしたときにチェックする属性を設定する必要があります。
元の投稿者が自分の問題をどのように解決したかを次に示します。
スレッドに行き着きました。唯一のトリックはos._exit
代わりに使用していましたsys.exit
import os
import time
import threading
class Alarm (threading.Thread):
def __init__ (self, timeout):
threading.Thread.__init__ (self)
self.timeout = timeout
self.setDaemon (True)
def run (self):
time.sleep (self.timeout)
os._exit (1)
alarm = Alarm (4)
alarm.start ()
time.sleep (2)
del alarm
print 'yup'
alarm = Alarm (4)
alarm.start ()
time.sleep (8)
del alarm
print 'nope' # we don't make it this far
あなたが言ったように、あなたはその秒数の間眠る新しいスレッドを始めることができます。
または、Windowsのマルチメディアタイマーの1つを使用できます(Pythonでは、windll.winmmにあります)。私timeSetEvent
はあなたが探しているものだと信じています。ちなみに、ここでそれを使用するコードを見つけました。