gpt4 book ai didi

python - pyinotify 中断 check_events

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:30 24 4
gpt4 key购买 nike

我知道 pyinotify.Notifier.check_events(self, timeout=None) 可能会超时 - 但我更喜欢它无限期地轮询。可以中断吗?

我正在调用 Notifier.stop(self),但它似乎没有从 check_events 中逃脱。

在下面的示例中,另一个线程调用 stopIt(),并且调用 self.notifier.stop() - 但“check_events is True”和“check_events”都不是是 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()

最佳答案

尽管线程并发运行,但每个线程都有自己独立的执行流程。一个线程无法通过调用另一线程的方法(例如通过调用 stopIt)将命令注入(inject)到另一线程的执行流中。

那么我们还能做什么呢?好吧,除了使用超时的明显选项之外,您还可以使用另一个线程来创建一个虚拟文件,例如,它会触发一个 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()

在不设置超时的情况下突破检查。

关于python - pyinotify 中断 check_events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com