Определите, изменился ли модуль Python, и перезагрузите его. - PullRequest
25 голосов
/ 07 июня 2011

Итак, я разрабатываю довольно большой проект на Python с несколькими модулями.«Основной» (работающий) модуль - это демон (фактически, Thrift-демон), который вызывает другие модули для его реальной функциональности.Запуск демона занимает много времени, потому что некоторые модули имеют довольно длительный и сложный процесс инициализации.

Поэтому, когда я запускаю демон, я жду ... скажем ... 2 минуты, чтобы всенагрузка, что не так уж плохо в общей схеме вещей.Однако для разработки это становится основной проблемой, потому что мне нужно перезапускать демона КАЖДЫЙ ВРЕМЯ, которое тратит много времени.

Большинство модулей загружается всего за несколько секунд.В идеале я хотел бы обнаружить, когда какие-либо файлы в конкретном модуле изменились, и перезагрузить этот конкретный модуль.Я уже разобрался , как перезагрузить модуль , но на данный момент я не могу понять, как наблюдать за конкретным модулем на предмет изменений.Помните, что в этом случае модуль - это не один файл .py, а каталог с файлами __init__.py и 5-10 .py, поэтому мне нужно определить, когда любой изони изменились.

Вот макет проекта (если он вообще что-то меняет)

project
| -- daemonize.py
| -- main.py
| -- moduleA
|    | -- __init__.py
|    | -- happy_panda.py
|    ` -- sad_panda.py
| -- moduleB
|    | -- __init__.py
|    | -- takes_forever_to_load.py
|    ` -- seriously_get_some_coffee.py
| -- moduleC
|    | -- __init__.py
|    | -- frequently_changes.py
|    | -- reasons_i_hate_my_job.txt
|    ` -- home_address_of_moduleB_developer.txt
` -- service.py <-- uses modules A, B, and C

Любые идеи или предложения приветствуются.

РЕДАКТИРОВАТЬ

Спасибо за отличный отзыв.Вот код, который я создал на основе предложений.Есть небольшая ошибка, из-за которой pyinotify, кажется, получает более одного уведомления, но это очень маленькая проблема для меня, поэтому я не собираюсь ее исправлять.

https://gist.github.com/1013122

Ответы [ 2 ]

9 голосов
/ 07 июня 2011

Обнаружение изменения файла без опроса

В сочетании с тем, что вы уже знаете, как перезагрузить модуль, этот ответ в значительной степени заполняет его.Он использует Inotify, чтобы «уведомить» (посмотреть, что они там сделали) программу при изменении файла.

1 голос
/ 07 июня 2011

Я бы посмотрел все файлы и определил, был ли файл изменен . Если бы это было так, я бы перезагрузил это.

...