Détecter si un module python change puis recharger

Je développe donc un projet Python assez volumineux avec un certain nombre de modules. Le module" main " (runnable) est un démon (un démon D'épargne, en fait) qui appelle à d'autres modules pour sa fonctionnalité réelle. Le démarrage du démon prend beaucoup de temps car certains modules ont des processus d'initialisation assez longs et impliqués.

Donc, quand je démarre le démon, j'attends... disons... 2 minutes pour tout charger, ce qui n'est pas trop mal dans le grand schéma des choses. Cependant, pour le développement, cela devient une douleur majeure car j'ai besoin de redémarrer le démon à chaque fois, ce qui m'a fait perdre beaucoup de temps.

La plupart des modules ne prennent que quelques secondes à charger. Idéalement, ce que je voudrais faire est de détecter quand l'un des fichiers d'un module particulier a changé, et de recharger ce module particulier. Je l'ai déjà compris comment recharger un module, mais à ce point je ne peux pas comprendre comment regarder un module particulier pour les changements. Gardez à l'esprit qu'un module n'est pas un seul .py fichier dans ce cas, mais plutôt un répertoire avec __init__.py et 5-10 .py fichiers, donc j'ai besoin de détecter lorsque tout d'entre eux ont changé.

Voici la mise en page du projet (si cela fait une différence)

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

Toutes les idées ou suggestions sont appréciées.

Modifier

Merci pour la grande rétroaction. Voici le code que j'ai créé en fonction des suggestions. Il y a un petit bug où pyinotify semble en avoir plus d'un notification, mais c'est un très petit problème pour moi, donc je ne vais pas le réparer.

Https://gist.github.com/1013122

22
demandé sur Community 2011-06-07 23:13:58

2 réponses

Détecter Le Changement De Fichier Sans Interroger

Couplé avec vous sachant déjà comment recharger votre module, cette réponse le remplit à peu près. Il utilise Inotify pour "notifier" (voir ce qu'ils ont fait là) le programme lorsque le fichier est modifié.

8
répondu Paystey 2017-05-23 12:00:20

Je regarde tous les fichiers, et détecter si un fichier a été modifié. Si c'était le cas, je le rechargerais .

1
répondu Nick ODell 2017-05-23 12:24:58