用于开发和重新加载守护进程的集成进程监视器。
项目描述
hupper是一个集成的进程监视器,它将跟踪对sys.modules中任何导入的 Python 文件以及自定义路径的更改。当文件更改时,该过程将重新启动。
命令行用法
Hupper 可以使用 hupper -m <module>程序加载任何类似于python -m <module>的 Python 代码。
$ hupper -m myapp
Starting monitor for PID 23982.
API 使用
首先为您的流程定义一个入口点。这必须是字符串格式的可导入路径。例如,myapp.scripts.serve.main。
# myapp/scripts/serve.py
import sys
import hupper
import waitress
def wsgi_app(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
yield b'hello'
def main(args=sys.argv[1:]):
if '--reload' in args:
# start_reloader will only return in a monitored subprocess
reloader = hupper.start_reloader('myapp.scripts.serve.main')
# monitor an extra file
reloader.watch_files(['foo.ini'])
waitress.serve(wsgi_app)
致谢
hupper的灵感来自 Carl J Meyer 和 David Glick 在 Pycon sprint 中所做的初始工作,并且被构建为 Ian Bicking 的优秀 PasteScript paste serve --reload和 Pyramid 的 pserve --reload的更健壮和通用的版本。
1.10.3 (2021-05-13)
支持 Python 3.8 和 3.9。
修复了源文件夹中的裸.pyc文件导致未处理异常的问题。见https://github.com/Pylons/hupper/pull/69
修复在比 Watchman 4.9.0 新的版本上使用 Watchman 文件监视器的问题。此修复修改hupper以使用 Watchman 的 watch-project功能,该功能还支持读取 .watchmanconfig文件以控制监视的某些属性。见https://github.com/Pylons/hupper/pull/70
1.10.2 (2020-03-02)
修复导致 SIGINT 在某些情况下无法正常工作的回归。见https://github.com/Pylons/hupper/pull/67
1.10.1 (2020-02-18)
使用 Watchman 时的性能改进。
1.10 (2020-02-18)
通过将SIGTERM信号转发给子进程并优雅地等待它退出来处理它。这应该可以在docker 容器和其他想要控制重新加载过程的系统中使用 hupper。
以前,SIGTERM会立即关闭hupper,将工作人员搁置并依靠它自行关闭。
避免在重新加载进程的信号处理程序中获取锁。见https://github.com/Pylons/hupper/pull/65
修复在较新版本的 Python 上使用imp模块导致的弃用警告。见https://github.com/Pylons/hupper/pull/65
1.9.1 (2019-11-12)
支持用户代码符号链接站点包的一些场景。这些以前被文件监视器忽略,但现在应该被跟踪。见https://github.com/Pylons/hupper/pull/61
1.9 (2019-10-14)
在hupper CLI上支持--shutdown-interval 。见https://github.com/Pylons/hupper/pull/56
在hupper CLI上支持--reload-interval 。见https://github.com/Pylons/hupper/pull/59
在崩溃后等待更改时,当 stdin 不是 TTY 时不要窒息。例如,在 Docker Compose 中运行时。见https://github.com/Pylons/hupper/pull/58
1.8.1 (2019-06-12)
在等待重新加载时杀死hupper时不要显示KeyboardInterrupt堆栈跟踪。
1.8 (2019-06-11)
如果工作进程崩溃,hupper可以通过在终端中按ENTER键来强制重新加载工作程序,而不是等待更改文件。见https://github.com/Pylons/hupper/pull/53
1.7 (2019-06-04)
在 Python 3.5+ 上,reloader.watch_files支持递归 glob 语法。见https://github.com/Pylons/hupper/pull/52
1.6.1 (2019-03-11)
如果 worker 立即崩溃,有时hupper会进入重启循环而不是等待代码更改。见https://github.com/Pylons/hupper/pull/50
1.6 (2019-03-06)
在支持SIGKILL和SIGTERM(不是 Windows)的系统上,hupper 现在将向工作进程发送SIGKILL作为最后的手段。通常,一个SIGINT (Ctrl-C) 或SIGTERM (on reload) 会杀死工人。如果在shutdown_interval秒内,worker 没有退出,它将收到一个SIGKILL。见https://github.com/Pylons/hupper/pull/48
支持hupper.start_reloader的logger参数以覆盖将消息输出到sys.stderr的默认记录器。见https://github.com/Pylons/hupper/pull/49
1.5 (2019-02-16)
通过hupper.start_reloader上的新ignore_files 选项添加对忽略自定义模式的支持。hupper cli 还支持通过-x选项忽略文件。见https://github.com/Pylons/hupper/pull/46
1.4.2 (2018-11-26)
修复了在更改触发了 > 4096 字节的守望者消息时提示“忽略来自守望者的损坏有效负载”消息并将文件监视器置于不可恢复状态的错误。见https://github.com/Pylons/hupper/pull/44
1.4.1 (2018-11-11)
在 virtualenv 是项目的根目录的情况下,不要忽略一些可能不是系统路径的路径。见https://github.com/Pylons/hupper/pull/42
1.4 (2018-10-26)
忽略对任何系统/已安装文件的更改。这主要包括对 stdlib 和site-packages中的任何文件的更改。以可编辑模式安装或根本未安装的任何内容仍将受到监视。这大大减少了hupper需要监控的文件数量。见https://github.com/Pylons/hupper/pull/40
1.3.1 (2018-10-05)
支持 Python 3.7。
如果应用程序无法在某些系统上重新启动,请避免重新启动循环。有一场比赛,当用户手动触发立即重新加载时, hupper未能检测到应用程序正在崩溃,因此陷入其重新启动逻辑。见https://github.com/Pylons/hupper/pull/37
忽略在半随机场景中出现的来自 watchman 的损坏数据包。见https://github.com/Pylons/hupper/pull/38
1.3 (2018-05-21)
通过hupper.watchman.WatchmanFileMonitor添加了守望者支持。这是支持 unix 套接字的系统上新的首选文件监视器。见https://github.com/Pylons/hupper/pull/32
hupper.watchdog.WatchdogFileMonitor现在将在从watchdog收到 ulimit 或其他错误时输出一些信息。见https://github.com/Pylons/hupper/pull/33
允许-q和-v cli 选项来控制详细程度。见https://github.com/Pylons/hupper/pull/33
将记录器值传递给hupper.interfaces.IFileMonitorFactory。这是hupper.interfaces.ILogger的一个实例,文件监视器可以使用它来输出错误和调试信息。见https://github.com/Pylons/hupper/pull/33
1.2 (2018-05-01)
仅跟踪 Python 源文件。以前hupper会跟踪所有 pyc 和 py 文件。现在,如果找到 pyc 文件,则搜索等效的源文件,如果找到,则忽略 pyc 文件。见https://github.com/Pylons/hupper/pull/31
允许通过将HUPPER_DEFAULT_MONITOR环境变量指定为监视器工厂的 Python 虚线路径来覆盖默认监视器查找 。例如, HUPPER_DEFAULT_MONITOR=hupper.polling.PollingFileMonitor。见https://github.com/Pylons/hupper/pull/29
对hupper.interfaces.IFileMonitorFactory API的向后不兼容更改以 将任意 kwargs 传递给工厂。见https://github.com/Pylons/hupper/pull/29
1.1 (2018-03-29)
支持CLI 上的-w以查看自定义文件路径。见https://github.com/Pylons/hupper/pull/28
1.0 (2017-05-18)
将sys.path复制到工作进程并确保hupper在 PYTHONPATH上,以便子进程可以将其导入以启动工作进程。这解决了zc.buildout如何将依赖项注入完全由sys.path操作完成的进程的问题。见https://github.com/Pylons/hupper/pull/27
0.5 (2017-05-10)
在非 Windows 系统上,确保执行 exec,以便工作人员不与重新加载程序共享相同的进程空间,从而导致在两者中导入的某些代码永远不会被重新加载。在引擎盖下,这是使用子进程而不是多进程的重大重写。见https://github.com/Pylons/hupper/pull/23
0.4.4 (2017-03-10)
修复某些无法将标准输入复制到子进程并崩溃的 Windows 版本。 https://github.com/Pylons/hupper/pull/16
0.4.3 (2017-03-07)
修复 pdb 和其他基于 readline 的程序以正常运行。见https://github.com/Pylons/hupper/pull/15
0.4.2 (2017-01-24)
在收到 SIGINT 后短暂暂停以允许工人自杀。如果它没有死,那么它就被终止了。见https://github.com/Pylons/hupper/issues/11
Python 3.6 兼容性。
0.4.1 (2017-01-03)
处理使用看门狗观察不存在的文件夹时可能出现的错误。
0.4.0 (2017-01-02)
支持通过hupper -m <module>运行任何 Python 模块。这等效于python -m除了在文件更改时完全重新加载进程。见https://github.com/Pylons/hupper/pull/8
0.3.6 (2016-12-18)
在崩溃之前阅读未知文件的回溯。如果导入由于模块范围异常而崩溃,则不会跟踪导致崩溃的文件,但这应该会有所帮助。
0.3.5 (2016-12-17)
尝试在崩溃之前将导入的路径发送到监视进程,以避免主进程等待它从未开始监视的文件更改的情况。
0.3.4 (2016-11-21)
使用 stdlib glob模块添加对 glob 的支持。在 Python 3.5+ 上,这允许使用**进行递归 glob 。在此之前,globbing 受到更多限制。
0.3.3 (2016-11-19)
修复了 Windows 32 位系统上的运行时故障。
0.3.2 (2016-11-15)
当 hupper 检测到崩溃并等待文件更改时,支持通过 SIGHUP 触发重新加载。
在导入 worker 模块之前设置 reloader 代理。这应该允许在模块范围而不是在可调用对象中完成一些工作。
0.3.1 (2016-11-06)
修复 PyPI 上的包长描述。
确保 stdin 文件句柄是可继承的,以防启用多处理的“spawn”变体。
0.3 (2016-11-06)
禁用工作进程导入的文件的字节码编译。这在开发时不是必需的,并且由于它如何处理 pyc 时间戳,它导致进程在 Windows 上重新启动两次。
修复 hupper 支持将标准输入转发到 Windows 上 Python < 3.5 上的工作进程。
修复一些可能的文件描述符泄漏。
通过内部化一些特定于 hupper 的集成来简化hupper.interfaces.IFileMonitor接口。他们现在可以专注于寻找变化。
添加hupper.interfaces.IFileMonitorFactory接口以改进hupper.interfaces.IFileMonitor所需的回调参数的 文档。
0.2 (2016-10-26)
视窗支持!
如果安装了看门狗以进行 inotify 样式的文件监视,则添加了对看门狗的支持。这是一个可选的依赖项,如果轮询不可用,hupper将回退到使用轮询。
0.1 (2016-10-21)
初始发行。