使用uWSGI部署Flask应用时启动2个进程而非1个的问题
解决uWSGI启动Flask应用时出现两个进程的问题
我来帮你理清这个问题——你用这条命令启动Flask应用:
uwsgi --http :8080 --wsgi-file app.py --callable app
预期只跑1个uWSGI进程,但实际出现了两个,从你的启动日志和ps aux结果都能看出来。
问题原因
你看到的第二个进程(pid 19721)是uWSGI的HTTP路由辅助进程。当你使用--http参数时,uWSGI会启动一个独立的进程来处理HTTP协议的解析,然后把请求转发给后面的worker进程(也就是pid 19720的那个)。这是--http参数的默认行为,目的是让worker专注于处理应用逻辑,而把HTTP层面的处理交给专门的进程。
你看启动日志里的这句:
spawned uWSGI http 1 (pid: 19721)
就是这个辅助进程被创建的记录,而后面的spawned uWSGI worker 1 (and the only) (pid: 19720, cores: 1)才是真正运行Flask应用的worker进程。
解决方案
如果你确实只需要一个进程运行,最推荐的调整方式是:
- 改用
--http-socket参数
这个参数会让worker进程直接监听HTTP端口并处理HTTP请求,不会额外生成HTTP路由进程。修改后的命令如下:
这种方式逻辑更直接,完全符合你单进程运行的需求。uwsgi --http-socket :8080 --wsgi-file app.py --callable app
验证
用修改后的命令启动后,再执行ps aux | grep uwsgi,你就会看到只有一个uWSGI进程在运行,和你的预期一致。
内容的提问来源于stack exchange,提问作者A. Makarevich
相关产品推荐
相关产品推荐

