当我将FastAPI应用程序部署到heroku时,启动事件被触发了两次。是我的问题吗?下面的代码不是我原来的应用程序,而是我为测试而做的一个临时应用程序。Heroku也是为了测试而做的。第一个
6vl6ewon1#
Uvicorn通过运行工作进程来运行。如果您没有通过--workers参数为它指定要使用的进程数,它将默认为WEB_CONCURRENCY环境变量的值,如果两者都没有设置,则返回到1:
--workers
WEB_CONCURRENCY
--workers INTEGER Number of worker processes. Defaults to the $WEB_CONCURRENCY environment variable if available, or 1. Not valid with --reload.
Heroku为WEB_CONCURRENCY环境变量设置默认值:WEB_CONCURRENCY环境变量是由Heroku根据进程的Dyno大小自动设置的。此功能旨在为您的应用程序提供一个合理的起点。我们建议您了解进程的内存要求并相应地设置此配置变量。Heroku可能已经根据您正在运行的dynos的大小将该值设置为2。这将导致两个工作线程并行运行,这就是您的日志所显示的:
Started parent process [4]
Started server process [11]
Started server process [10]
如果需要,可以更改WEB_CONCURRENCY的值。如果您的代码在多个工作线程中出现故障,这表明您的代码存在问题。在这种情况下,我建议您不要将此值设置为1,而是找出问题的原因并解决问题。一个常见的原因是use of global variables。
1条答案
按热度按时间6vl6ewon1#
Uvicorn通过运行工作进程来运行。
如果您没有通过
--workers
参数为它指定要使用的进程数,它将默认为WEB_CONCURRENCY
环境变量的值,如果两者都没有设置,则返回到1:Heroku为
WEB_CONCURRENCY
环境变量设置默认值:WEB_CONCURRENCY
环境变量是由Heroku根据进程的Dyno大小自动设置的。此功能旨在为您的应用程序提供一个合理的起点。我们建议您了解进程的内存要求并相应地设置此配置变量。Heroku可能已经根据您正在运行的dynos的大小将该值设置为2。这将导致两个工作线程并行运行,这就是您的日志所显示的:
Started parent process [4]
Started server process [11]
Started server process [10]
如果需要,可以更改
WEB_CONCURRENCY
的值。如果您的代码在多个工作线程中出现故障,这表明您的代码存在问题。在这种情况下,我建议您不要将此值设置为1,而是找出问题的原因并解决问题。一个常见的原因是use of global variables。