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

Итак, я разрабатываю довольно большой проект 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

26
задан Community 23 May 2017 в 12:00
поделиться

2 ответа

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

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

9
ответ дан 28 November 2019 в 17:29
поделиться

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

1
ответ дан 28 November 2019 в 17:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: