1

我知道pyinotify.Notifier.check_events(self, timeout=None)可以暂停 - 但我更希望它无限期地轮询。有可能中断吗?

我在打电话Notifier.stop(self),但它似乎没有逃脱check_events

在下面的示例中,另一个线程调用stopIt(), 并被self.notifier.stop()调用 - 但既没有打印“check_events is True”也没有打印“check_events is False”:

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一个线程不能通过调用其方法(例如调用)将命令注入另一个线程的执行流程。

那么我们还能做些什么呢?好吧,除了使用超时的明显选项之外,您还可以使用另一个线程来创建一个虚拟文件,例如,它会触发一个 IN_CREATE 事件,然后 MyProcessing 可以处理该事件。

我看到了,所以它可以设置,(threading.Thread 实例在哪里MyProcessing(self),而不是实例。)然后可以删除虚拟文件。selfself.done = TrueselfMyProcessingMyProcessing

然后你可以使用

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

在不设置超时的情况下退出检查。

于 2011-12-30T04:25:22.490 回答