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 ответ
Несмотря на то, что потоки выполняются одновременно, каждый поток имеет свой независимый поток выполнения. Один поток не может вводить команды в поток выполнения другого потока, вызывая его методы (например, вызывая stopIt
).
Так что еще мы можем сделать? Ну, кроме очевидной возможности использования тайм-аута, вы можете использовать другой поток для создания фиктивного файла, скажем, который запускает событие IN_CREATE, которое затем может обработать MyProcessing.
я вижу MyProcessing(self)
знает self
чтобы он мог установить self.done = True
, (где self
это поток. Экземпляр, а не MyProcessing
пример.) MyProcessing
может затем удалить фиктивный файл.
Тогда вы могли бы использовать
if (not self.done) and self.notifier.check_events():
print "check_events is True"
self.notifier.read_events()
выйти из чека без установки таймаута.