Skip to main content

用于开发和重新加载守护进程的集成进程监视器。

项目描述

https://img.shields.io/pypi/v/hupper.svg https://github.com/Pylons/hupper/workflows/Build/test%20on%20Linux/badge.svg?branch=master https://github.com/Pylons/hupper/workflows/Build/test%20on%20MacOS/badge.svg?branch=master https://github.com/Pylons/hupper/workflows/Build/test%20on%20Windows/badge.svg?branch=master 文件状态

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)

1.10.1 (2020-02-18)

  • 使用 Watchman 时的性能改进。

1.10 (2020-02-18)

1.9.1 (2019-11-12)

1.9 (2019-10-14)

1.8.1 (2019-06-12)

  • 在等待重新加载时杀死hupper时不要显示KeyboardInterrupt堆栈跟踪。

1.8 (2019-06-11)

1.7 (2019-06-04)

1.6.1 (2019-03-11)

1.6 (2019-03-06)

  • 在支持SIGKILLSIGTERM(不是 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)

1.4.2 (2018-11-26)

  • 修复了在更改触发了 > 4096 字节的守望者消息时提示“忽略来自守望者的损坏有效负载”消息并将文件监视器置于不可恢复状态的错误。见https://github.com/Pylons/hupper/pull/44

1.4.1 (2018-11-11)

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)

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)

1.0 (2017-05-18)

  • sys.path复制到工作进程并确保hupperPYTHONPATH上,以便子进程可以将其导入以启动工作进程。这解决了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)

0.4.3 (2017-03-07)

0.4.2 (2017-01-24)

0.4.1 (2017-01-03)

  • 处理使用看门狗观察不存在的文件夹时可能出现的错误。

0.4.0 (2017-01-02)

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)

  • 初始发行。

项目详情