为什么在HEROKU中FastAPI启动事件运行两次?

zsohkypk  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(543)

当我将FastAPI应用程序部署到heroku时,启动事件被触发了两次。是我的问题吗?
下面的代码不是我原来的应用程序,而是我为测试而做的一个临时应用程序。Heroku也是为了测试而做的。
第一个

6vl6ewon

6vl6ewon1#

Uvicorn通过运行工作进程来运行。
如果您没有通过--workers参数为它指定要使用的进程数,它将默认为WEB_CONCURRENCY环境变量的值,如果两者都没有设置,则返回到1:

--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

相关问题