Python看门狗:忽略重复事件

时间:2018-11-07 13:14:32

标签: python watchdog python-watchdog

我正在尝试设置看门狗,以便可以监视对JavaScript文件的更改。但是修改单个文件时,您总是会得到重复的事件。

我想要设置它,以便在修改文件时它会在事件发生时显示,并且如果它与上一个事件相同,则它什么也不做。这样,它可以忽略重复的事件。有没有办法做到这一点,并且始终将上一个事件的时间存储在变量中?

import time
from os import path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler


class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(time.ctime(), f'path : {event.src_path}')


if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path=path.join(path.dirname(__file__), 'static/js'), recursive=False)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

1 个答案:

答案 0 :(得分:1)

一种简单的方法是将文件/日期存储在字典中,然后在处理事件之前检查时间/文件源是否在字典中。

class MyHandler(FileSystemEventHandler):
    file_cache = {}

    def on_modified(self, event):
        seconds = int(time.time())
        key = (seconds, event.src_path)
        if key in self.file_cache:
            return
        self.file_cache[key] = True
        # Process the file

如果您担心事件的数量,可以尝试使用cachetools来缓存结果,以便使字典保持较小的大小。