- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道 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/
我知道 pyinotify.Notifier.check_events(self, timeout=None) 可能会超时 - 但我更喜欢它无限期地轮询。可以中断吗? 我正在调用 Notifier.s
我是一名优秀的程序员,十分优秀!