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)
有没有办法在我应用下载时"暂停"观察者,并在我完成后再次"取消暂停"它?
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
如果您想为每个处理程序指定跳过,您可以使用与上述方法类似的方法。
| 归档时间: |
|
| 查看次数: |
2057 次 |
| 最近记录: |