Подтвердить что ты не робот

Обнаруживать, если модуль python изменяется, а затем перезагружать

Итак, я разрабатываю довольно большой проект python с несколькими модулями. "Основной" (runnable) модуль - это демон (демон 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

4b9b3361

Ответ 1

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

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