20

時々ハングする機能があります。

通常はアラームを設定しますが、Windows を使用しているため使用できません。

これを回避する簡単な方法はありますか、または呼び出すスレッドを作成するだけtime.sleep()ですか?

4

4 に答える 4

3

最も堅牢な解決策は、サブプロセスを使用してから、そのサブプロセスを強制終了することです。Python2.6 では、subprocess.Popen() に .kill() が追加されています。

あなたのスレッド化アプローチが期待どおりに機能するとは思いません。Thread オブジェクトへの参照を削除しても、スレッドは強制終了されません。代わりに、スレッドがウェイクアップしたときにチェックする属性を設定する必要があります。

于 2009-03-30T21:26:04.390 に答える
3

元の投稿者が自分の問題をどのように解決したかを次に示します。

スレッドに行き着きました。唯一のトリックは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
于 2015-07-28T08:29:22.127 に答える
2

あなたが言ったように、あなたはその秒数の間眠る新しいスレッドを始めることができます。

または、Windowsのマルチメディアタイマーの1つを使用できます(Pythonでは、windll.winmmにあります)。私timeSetEventはあなたが探しているものだと信じています。ちなみに、ここでそれを使用するコードを見つけました。

于 2009-03-13T19:27:50.467 に答える