Я использую модуль сторожевого таймера Python на сервере Windows 2012 для мониторинга новых файлов, появляющихся на общем диске. Когда watchdog замечает новый файл, он запускает процесс восстановления базы данных.Pidon watchdog windows wait до завершения копирования
Однако, похоже, что сторожевой таймер попытается восстановить файл, который он создал, и не дожидаться завершения копирования файла на общий диск. Таким образом, я изменил событие на 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()
Как вы передаете файл? Можете ли вы также загрузить контрольную сумму? Идея сделать восстановление БД без него страшно для меня. Если вы переходите по маршруту «проверка, задержка, проверка еще раз», вы идете с оптимизмом. –