ale*_*ird 5 fastapi uvicorn pyngrok
我有一个简单的Uvicorn应用程序(使用FastAPI构建)。开发中,uvicorn server:app --reload。该--reload参数表示将启动两个线程,一个用于服务器,一个用于监视文件更改\xe2\x80\x94当检测到文件更改时,将重新启动服务器线程。
到目前为止没有什么特别的。这在 Flask、Django 和其他开发服务器中也很常见。问题是,我想pyngrok在启动开发服务器时使用打开一个隧道,并且我希望该隧道与这两个线程的父线程一样长寿。也就是说,当检测到文件更改并重新启动开发服务器时,我不希望重新启动隧道(因为ngrok这会导致生成新的公共 URL 并中断现有连接)。
使用 Flask 和 Django,这相对容易完成。例如,对于 Flask,我只是这样做os.environ.get("WERKZEUG_RUN_MAIN") != "true",对于 Django,我类似地评估RUN_MAIN环境变量,并且在任何一种情况下,我仅在将这些设置为 时才实例化隧道true。我找不到与 Uvicorn 一起使用的类似变量。有人可以帮忙吗?
小智 0
在使用 Uvicorn 运行的 FastAPI 应用程序中,您可以--reload通过检查sys.argv列表来检查该选项是否已启用。该sys.argv列表包含传递给脚本的命令行参数,当--reload使用该选项时,它将出现在列表中。
您可以使用以下代码来确定该--reload选项是否启用:
import sys
def is_reload_enabled():
return "--reload" in sys.argv
if is_reload_enabled():
# Do not instantiate the tunnel when --reload is enabled
print("Reload is enabled. Tunnel should not be started.")
else:
# Instantiate the tunnel when --reload is not enabled
print("Reload is disabled. Start the tunnel here.")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |