我试图让 Uvicorn 在以编程方式启动时自动重新启动检测到的文件更改,就像从命令行--debug启动时一样。以下语句位于我的 api 源代码文件的底部,虽然 Uvicorn 启动并运行良好,但它不会以重新加载模式启动。我尝试将调试参数设置为各种不同的值:uvicorn.run(debug='true'、'True'、'yes' 和 True(python 布尔值),但似乎没有任何效果。
uvicorn.run(app,
host=run_config['api_host'],
port=run_config['api_port'],
log_level=run_config['log_level'],
debug='true')
Run Code Online (Sandbox Code Playgroud)
编辑:参考我对@howderek 的回答的评论:我尝试了建议代码的修改版本。当服务器成功启动时,下面的代码不会打开重新加载器:
import uvicorn
from uvicorn.reloaders.statreload import StatReload
reloader = StatReload('debug')
reloader.run(uvicorn.run(app, host='localhost', port=9187, debug='true'))
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 19
文档指出您可以只使用reload=True.
例子:
uvicorn.run("example:app", port=5000, reload=True, access_log=False)
Run Code Online (Sandbox Code Playgroud)
那是因为 --debug 标志不仅仅debug=True在运行函数中设置。
在Uvicorn 源中,他们似乎正在创建一个StatReload从uvicorn.reloaders.statreload
我找不到有关此功能的任何文档,但似乎您需要做的就是:
uvicorn.run(app,
host=run_config['api_host'],
port=run_config['api_port'],
log_level=run_config['log_level'],
debug='true')
Run Code Online (Sandbox Code Playgroud)
并使它:
from uvicorn.reloaders.statreload import StatReload
from uvicorn.main import run, get_logger
reloader = StatReload(get_logger(run_config['log_level']))
reloader.run(run, {
'app': app,
'host': run_config['api_host'],
'port': run_config['api_port'],
'log_level': run_config['log_level'],
'debug': 'true'
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |