python - 检测 python 模块是否更改然后重新加载

标签 python import runtime

所以我正在开发一个包含许多模块的相当大的 python 项目。 “主”(可运行)模块是一个守护进程(实际上是一个 Thrift 守护进程),它调用其他模块以实现其实际功能。启动守护进程需要很长时间,因为某些模块的初始化过程相当冗长。

所以,当我启动守护进程时,我会等待……比如说……加载所有内容需要 2 分钟,这在总体方案中还算不错。然而,对于开发来说,这变得很痛苦,因为我需要每次都重新启动守护进程,这浪费了我很多时间。

大多数模块只需几秒钟即可加载。理想情况下,我想做的是检测特定模块中的任何文件何时发生更改,然后重新加载该特定模块。我已经想通了how to reload a module ,但此时我不知道如何查看特定模块的更改。请记住,在这种情况下,模块不是单个 .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

最佳答案

Detect File Change Without Polling

再加上您已经知道如何重新加载您的模块,这个答案几乎可以填满它。当文件被修改时,它使用 Inotify 来“通知”(看看他们在那里做了什么)。

关于python - 检测 python 模块是否更改然后重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6270395/

相关文章:

Python - "comparison"将一个数组映射到另一个数组的简单方法

python - 无法保留内存块,在 python 中导入 json 错误

python - 始终在 python 脚本的开头导入相同的列表

winapi - ListBox.FindString 最坏情况下的运行时间是什么? O(n)、O(n log n)、O(1)?

rust - 如何使用 glibc 而不是 musl 使用 rustc 创建静态可执行文件?

python - 逐行比较不同形状的 numpy 数组,删除相同的值?

python - 如何将小时添加到时间戳

Python 类型错误 : Required argument 'source' (pos 1) not found

eclipse - 以编程方式将库添加到 Eclipse 项目

c - C 结构中的运行时条件字段