Найти - Пользователи
Полная версия: Быстрое определение изменения файлов
Начало » Python для новичков » Быстрое определение изменения файлов
1 2
r1s
Необходимо для заданных директорий отслеживать изменения, директорий порядка 20, может быть 5-7 вложенных, в каждой директории около 20-ти файлов, реакция на изменения должна быть не позднее 3-4мин. Пока приходит в голову 2 варианта: пробежаться по всем директориям, записать хеши файлов, для каждой директории записать количество объектов, запускать каждые 2мин и сравнивать; другой вариант - использовать pyinotify, т.к пока не нашел как генерить события изменения в вложенной директории, то на каждую директорию и поддиректорию нужен будет тред. Вопрос состоит в производительности, второй вариант конечно предпочтительнее, но в худшем варианте будет 140 тредов на pyinotify. Как лучше сделать, может есть другие варианты и я перемудрил.
Ferroman
Какая ось?
balu
Для целей обновления? Под какую ось?
r1s
Прошу прощения, ось и не указал. Linux.
balu
r1s
Прошу прощения, ось и не указал. Linux.
Ты не указал и цель. Предполагаю, что это тебе надо для синхронизации твоих исходников с клиентскими машинами.
В этом случае я вижу два варианта :
1) гугли про rsync
2) пакетирование с последующей настройкой sudo.
Ferroman
inotify.
Либа для питона:
pyinotify
r1s
Про pyinotify я и писал, невнимательно прочел документацию, для поддиректорий автоматом можно генерировать треды. Буду пробовать его.
balu
Ты не указал и цель.
Что необходимо я написал, этого в принципе достаточно. Это только небольшой компонент программы. Применение похоже, но не про то.
Ferroman
Да, что-то я пропустил про pyinotify в посте.
r1s
Обнаружилась одна не совсем приятная особенность, может даже бага. Eсли весим WatchManager() на файл на вторую и больше директорию от корня, например /home/blabla/file.txt, то не отслеживается событие IN_MODIFY, а сыплет странное.
start monitoring /home/blabla/tmp/file.txt with mask 0x00000fff
event_name: IN_OPEN is_dir: False mask: 32 name: path: /home/blabla/tmp/file.txt wd: 1
event_name: IN_CLOSE_NOWRITE is_dir: False mask: 16 name: path: /home/blabla/tmp/file.txt wd: 1
event_name: IN_MOVE_SELF is_dir: False mask: 2048 name: path: /home/blabla/tmp/file.txt-invalided-path wd: 1
event_name: IN_ATTRIB is_dir: False mask: 4 name: path: /home/blabla/tmp/file.txt-invalided-path wd: 1
event_name: IN_DELETE_SELF is_dir: False mask: 1024 name: path: /home/blabla/tmp/file.txt-invalided-path wd: 1
event_name: IN_IGNORED is_dir: False mask: 32768 name: path: /home/blabla/tmp/file.txt-invalided-path wd: 1
С директориями и поддиректориями все нормально, т.е если повесить WatchManager() на /home/blabla/ или файл будет по пути /home/file.txt, то событие изменения file.txt отследится.
Пробовал os.chdir('/home/blabla/tmp/') и уже потом отслеживать файл, но не помогло.
Lexander
Код запостите.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB