pyinotify 中断 check_events
我知道 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()
1 个回答
1
虽然多个线程可以同时运行,但每个线程都有自己独立的执行流程。一个线程不能通过调用另一个线程的方法(比如调用 stopIt
)来干扰或控制另一个线程的执行。
那我们还能做些什么呢?除了使用超时这个明显的选择外,你还可以让另一个线程创建一个虚拟文件,比如说,这个文件会触发一个 IN_CREATE 事件,然后 MyProcessing
就可以处理这个事件。
我看到 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()
来在不设置超时的情况下跳出检查。