Сторожевой таймер в качестве фонового потока - Python - PullRequest
1 голос
/ 21 января 2020

У меня есть эта настройка сторожевого таймера в файле main.py, который должен запускать Watcher как демон (в фоновом режиме), делать некоторые вещи во время его работы (на которые должен реагировать Watcher, например, создавать тестовый файл), затем завершить работу Watcher.

from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
import time
import threading


class Watcher:
    def watch_dir(self):
        patterns = "*"
        event_handler = PatternMatchingEventHandler(patterns)
        event_handler.on_any_event = self.on_any_event
        observer = Observer()
        observer.schedule(event_handler, 'someDirToObserve')
        observer.start()

        try:
            while True:
                time.sleep(2)
        except Exception as e:
            observer.stop()
            time.sleep(30)
        observer.join()

    def on_any_event(self, event):
        print(event)


def start_watcher(watcher):
    watcher.watch_dir()


def main():
    print("Start")
    watcher = Watcher()
    thread = threading.Thread(target=start_watcher(watcher), daemon=True)
    thread.start()
    test_file = 'SomeTestFile'
    test_file.unlink()
    with test_file.open('w') as f:
        f.write('Test')
    print("Oh shit")
    thread.join()


if __name__ == '__main__':
    main()

Как запустить Watcher в фоновом режиме во время выполнения своих операций и как правильно завершить его?

1 Ответ

1 голос
/ 29 февраля 2020

Это решение сработало для меня. Flask приложение в главном потоке и наблюдатель в другом.

flask приложение с наблюдателем сторожевого устройства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...