Я использую модуль сторожевого таймера Python на сервере Windows 2012 для отслеживания новых файлов, появляющихся на общем диске. Когда сторожевой таймер замечает новый файл, он запускает процесс восстановления базы данных.
Однако похоже, что сторожевой таймер попытается восстановить файл во второй раз, когда он будет создан, а не будет ждать завершения копирования файла на общий диск. Поэтому я изменил событие на on_modified, но есть два события on_modified: одно при первоначальном копировании файла и одно после завершения копирования.
Как я могу обработать два события on_modified, чтобы они срабатывали только после завершения копирования файла на общий диск?
Что происходит, когда несколько файлов копируются на общий диск одновременно?
Вот мой код
import time
import subprocess
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class NewFile(FileSystemEventHandler):
def process(self, event):
if event.is_directory:
return
if event.event_type == 'modified':
if getext(event.src_path) == 'gz':
load_pgdump(event.src_path)
def on_modified(self, event):
self.process(event)
def getext(filename):
"Get the file extension"
file_ext = filename.split(".",1)[1]
return file_ext
def load_pgdump(src_path):
restore = 'pg_restore command ' + src_path
subprocess.call(restore, shell=True)
def main():
event_handler = NewFile()
observer = Observer()
observer.schedule(event_handler, path='Y:\\', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == '__main__':
main()