我正在尝试让Uvicorn以编程方式启动时,在检测到的文件更改后自动重新启动,就像通过命令行使用--debug
开关启动时一样。以下语句位于我的api源代码文件的底部,虽然Uvicorn启动并运行良好,但它不会在重新加载模式下启动。我尝试将debug参数设置为各种不同的值: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')
编辑:参考我对@howderek答案的评论:我已经尝试过修改建议代码的版本。服务器成功启动后,下面的代码不会打开重新加载器:
import uvicorn
from uvicorn.reloaders.statreload import StatReload
reloader = StatReload('debug')
reloader.run(uvicorn.run(app, host='localhost', port=9187, debug='true'))
答案 0 :(得分:2)
这是因为--debug标志的作用不只是在run函数中设置debug=True
。
在Uvicorn source中,他们似乎正在创建一个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')
并使其:
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'
})
答案 1 :(得分:2)
documentation 声明您只能使用 reload=True
。
示例:
uvicorn.run("example:app", port=5000, reload=True, access_log=False)