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()

выйти из чека без установки таймаута.

Другие вопросы по тегам