【问题标题】:Problem enabling Uvicorn auto-restart when launching programmatically with uvicorn.run使用 uvicorn.run 以编程方式启动时启用 Uvicorn 自动重启的问题
【发布时间】:2018-10-12 18:05:07
【问题描述】:

我试图让 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')

编辑:参考我对@howderek 回答的评论:我尝试了建议代码的修改版本。当服务器成功启动时,下面的代码并没有打开重新加载器:

import uvicorn
from uvicorn.reloaders.statreload import StatReload
reloader = StatReload('debug')
reloader.run(uvicorn.run(app, host='localhost', port=9187, debug='true'))

【问题讨论】:

    标签: api wsgi


    【解决方案1】:

    documentation 声明您可以只使用reload=True

    例子:

    uvicorn.run("example:app", port=5000, reload=True, access_log=False)
    

    【讨论】:

      【解决方案2】:

      这是因为 --debug 标志不仅仅在运行函数中设置debug=True

      Uvicorn source 中,他们似乎正在创建一个从uvicorn.reloaders.statreload 导入的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'
      })
      

      【讨论】:

      • 我很确定这是在正确的方向,但正如所写的那样,它并不能很好地工作,因为 uivicorn 没有方法 get_logger (但 StatReload 本身确实需要一个 logger 参数)。也不会调用 asgi 应用程序名称。
      • 就像上面编辑中写的那样完美工作。非常感谢!!
      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2018-07-25
      • 2012-04-28
      • 2022-10-08
      相关资源
      最近更新 更多