Уведомления

Группа в Telegram: @pythonsu

#1 Март 31, 2009 23:25:12

r1s
От:
Зарегистрирован: 2008-09-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Необходимо для заданных директорий отслеживать изменения, директорий порядка 20, может быть 5-7 вложенных, в каждой директории около 20-ти файлов, реакция на изменения должна быть не позднее 3-4мин. Пока приходит в голову 2 варианта: пробежаться по всем директориям, записать хеши файлов, для каждой директории записать количество объектов, запускать каждые 2мин и сравнивать; другой вариант - использовать pyinotify, т.к пока не нашел как генерить события изменения в вложенной директории, то на каждую директорию и поддиректорию нужен будет тред. Вопрос состоит в производительности, второй вариант конечно предпочтительнее, но в худшем варианте будет 140 тредов на pyinotify. Как лучше сделать, может есть другие варианты и я перемудрил.



Офлайн

#2 Апрель 1, 2009 01:07:11

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Какая ось?

Офлайн

#3 Апрель 1, 2009 09:11:06

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Для целей обновления? Под какую ось?



Офлайн

#4 Апрель 1, 2009 15:03:25

r1s
От:
Зарегистрирован: 2008-09-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Прошу прощения, ось и не указал. Linux.



Офлайн

#5 Апрель 1, 2009 16:21:47

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

r1s
Прошу прощения, ось и не указал. Linux.
Ты не указал и цель. Предполагаю, что это тебе надо для синхронизации твоих исходников с клиентскими машинами.
В этом случае я вижу два варианта :
1) гугли про rsync
2) пакетирование с последующей настройкой sudo.



Офлайн

#6 Апрель 1, 2009 17:57:39

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

inotify.
Либа для питона:
pyinotify

Отредактировано (Апрель 1, 2009 17:57:53)

Офлайн

#7 Апрель 1, 2009 19:27:08

r1s
От:
Зарегистрирован: 2008-09-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Про pyinotify я и писал, невнимательно прочел документацию, для поддиректорий автоматом можно генерировать треды. Буду пробовать его.

balu
Ты не указал и цель.
Что необходимо я написал, этого в принципе достаточно. Это только небольшой компонент программы. Применение похоже, но не про то.



Офлайн

#8 Апрель 1, 2009 19:38:09

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Да, что-то я пропустил про pyinotify в посте.

Офлайн

#9 Апрель 2, 2009 17:53:37

r1s
От:
Зарегистрирован: 2008-09-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Обнаружилась одна не совсем приятная особенность, может даже бага. 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/') и уже потом отслеживать файл, но не помогло.



Отредактировано (Апрель 2, 2009 21:37:57)

Офлайн

#10 Апрель 2, 2009 18:09:25

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Быстрое определение изменения файлов

Код запостите.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version