1

タイムアウトが発生する可能性があることはわかっていpyinotify.Notifier.check_events(self, timeout=None)ますが、無期限にポーリングすることをお勧めします。それを中断することは可能ですか?

と呼んNotifier.stop(self)でいますが、から逃げていないようですcheck_events

次の例では、別のスレッドがを呼び出しstopIt()self.notifier.stop()呼び出されますが、「check_eventsisTrue」も「check_eventsisFalse」も出力されません。

def run(self):
    self.notifier = pyinotify.Notifier(self.monitor, MyProcessing(self))
    while True:
        self.notifier.process_events()
        print "Waiting at check_events"
        if self.notifier.check_events():
            print "check_events is True"
            self.notifier.read_events()
        else:
            print "check_events is False"
    print "Out of while"
    return True

def stopIt(self):
    self.notifier.stop()
4

1 に答える 1

1

スレッドは同時に実行されますが、各スレッドには独自の実行フローがあります。あるスレッドは、そのメソッドを呼び出すことによって(を呼び出すなどして)、別のスレッドの実行フローにコマンドを挿入することはできませんstopIt

では、他に何ができるでしょうか?タイムアウトを使用するという明白なオプションに加えて、他のスレッドを使用してダミーファイルを作成することもできます。たとえば、MyProcessingが処理できるIN_CREATEイベントをトリガーします。

知っMyProcessing(self)ているselfのでself.done = True、(selfインスタンスではなく、threading.ThreadインスタンスがどこにあるかMyProcessing)を設定しMyProcessingて、ダミーファイルを削除することができます。

その後、あなたは使用することができます

    if (not self.done) and self.notifier.check_events():
        print "check_events is True"
        self.notifier.read_events()

タイムアウトを設定せずにチェックを解除します。

于 2011-12-30T04:25:22.490 に答える