2 votes

Watchdog comme fil d'arrière-plan - Python

J'ai cette configuration de chien de garde dans le fichier main.py qui devrait exécuter le Watcher comme un démon (en arrière-plan), faire certaines choses pendant qu'il tourne (auxquelles le Watcher devrait réagir, par exemple créer un fichier de test) puis terminer le 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()

Comment puis-je faire fonctionner le Watcher en arrière-plan tout en effectuant mes opérations et comment puis-je le terminer correctement ?

1voto

Muhammad Umar Points 449

Cette solution a fonctionné pour moi. L'application Flask sur le thread principal et l'observateur sur un autre.

application flask avec observateur watchdog

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X