tornado.autoreload
— 开发环境中自动检测代码变更¶
当源文件被修改时,自动重启服务器。
大多数应用程序不应该直接访问此模块。相反,在 tornado.web.Application
构造函数中传递关键字参数 autoreload=True
(或 debug=True
,它启用此设置和几个其他设置)。这将启用自动重新加载模式以及检查模板和静态资源的更改。请注意,重启是一个破坏性操作,当进程重启时,任何正在进行的请求都将被中止。(如果你想在使用其他调试模式功能时禁用自动重新加载,请同时传递 debug=True
和 autoreload=False
)。
此模块也可以用作围绕脚本(如单元测试运行器)的命令行包装器。有关详细信息,请参阅 main
方法。
命令行包装器和应用程序调试模式可以一起使用。这种组合受到鼓励,因为包装器可以捕获语法错误和其他导入时失败,而调试模式在服务器启动后捕获更改。
当使用 HTTPServer
的多进程模式时,此模块将无法正常工作。
重新加载会丢失任何 Python 解释器命令行参数(例如 -u
),因为它使用 sys.executable
和 sys.argv
重新执行 Python。此外,修改这些变量会导致重新加载行为不正常。
- tornado.autoreload.start(check_time: int = 500) None [source]¶
开始监视源文件以进行更改。
在版本 5.0 中更改: 已删除
io_loop
参数(自版本 4.1 起已弃用)。
- tornado.autoreload.wait() None [source]¶
等待被监视的文件发生变化,然后重新启动进程。
旨在用于单元测试运行器等脚本的末尾,以便在任何源文件更改后重新运行测试(但另请参阅
main
中的命令行界面)
- tornado.autoreload.add_reload_hook(fn: Callable[[], None]) None [source]¶
添加一个函数,在重新加载进程之前调用。
请注意,对于打开的文件和套接字句柄,通常最好设置
FD_CLOEXEC
标志(使用fcntl
或os.set_inheritable
),而不是使用重新加载钩子来关闭它们。
- tornado.autoreload.main() None [source]¶
命令行包装器,用于在脚本源代码发生更改时重新运行脚本。
脚本可以通过文件名或模块名指定
python -m tornado.autoreload -m tornado.test.runtests python -m tornado.autoreload tornado/test/runtests.py
使用此包装器运行脚本类似于在脚本末尾调用
tornado.autoreload.wait
,但此包装器可以捕获导入时的问题(例如语法错误),否则这些问题会阻止脚本到达其对wait
的调用。