Python Watchdog:有没有办法暂停观察者?

Ayr*_*yrx 5 python watchdog python-2.7

我正在使用Watchdog来监控目录并使其与Dropbox保持同步.

我面临的情况是,每次从Dropbox下载文件时,都会触发上传事件,因为我需要写入Watchdog正在监视的目录.这是我正在使用的代码.

event_handler = UploadHandler.UploadHandler()
observer = Observer()
observer.schedule(event_handler, path=APP_PATH, recursive=True)
observer.start()

try:
    while True:
        # Apply download here   
        time.sleep(20)

except KeyboardInterrupt:
    observer.stop()

observer.join()
Run Code Online (Sandbox Code Playgroud)

有没有办法在我应用下载时"暂停"观察者,并在我完成后再次"取消暂停"它?

box*_*dot 0

dispatch_events您可以覆盖该类的方法Observer来跳过您不想分派的事件。以下是如何执行此操作的示例:

class SkipObserver(watchdog.observers.Observer):
    def __init__(self, *args):
        Observer.__init__(self, *args)
        self._skip_list = []

    def skip(self, event):
        with self._lock:
            self._skip_list.append(event)

    def dispatch_events(self, event_queue, timeout):
        event, watch = event_queue.get(block=True, timeout=timeout)
        try:
            if event in self._skip_list:
                self._skip_list.remove(event)
            else:
                self._dispatch_event(event, watch)
        except KeyError:
            pass
        event_queue.task_done()
Run Code Online (Sandbox Code Playgroud)

现在在示例中替换Observer为并使用该方法来跳过事件。请注意在处理程序中使用,因为这会导致死锁,即此处实现的阻塞。在处理事件时,观察者被锁定。SkipObserverskipskipskip

如果您想为每个处理程序指定跳过,您可以使用与上述方法类似的方法。