You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Gunicorn单命令启动不同worker数的同端口Flask服务?

单命令启动多Gunicorn应用并共享端口的方案

问题背景

我在服务器上可以通过以下两条命令启动两个服务:

gunicorn -w 2 server:app1
gunicorn -w 4 server:app2

但每次都要执行两条命令,想知道有没有办法用一条命令同时启动app1和app2,要求app1用2个worker,app2用4个worker,并且二者使用同一端口。

可行解决方案

方案1:使用Gunicorn多应用配置文件

Gunicorn支持通过配置文件定义多个应用,让它们共享同一个监听端口,由主进程统一管理worker资源。

  1. 创建配置文件gunicorn_multi.py:
# 绑定目标共享端口
bind = "0.0.0.0:8000"

# 导入并定义第一个应用
def app1():
    from server import app1
    return app1

# 导入并定义第二个应用
def app2():
    from server import app2
    return app2

# 配置应用列表,指定每个应用的worker数量
applications = [
    (bind, app1, {"workers": 2}),
    (bind, app2, {"workers": 4})
]
  1. 执行启动命令:
gunicorn -c gunicorn_multi.py

这种方式下,Gunicorn会启动一个主进程,分别为两个应用分配指定数量的worker,所有worker共享同一端口,请求会被正确路由到对应的应用(注意确保两个应用的路由规则没有冲突)。

方案2:编写统一WSGI入口应用

通过WSGI中间件实现请求分发,把两个应用整合到一个入口,再用Gunicorn启动这个入口,统一分配worker资源。

  1. 创建入口文件wsgi_entry.py:
from server import app1, app2
from werkzeug.middleware.dispatcher import DispatcherMiddleware

# 根据URL路径分发请求:示例中app1处理根路径,app2处理/api/app2路径
application = DispatcherMiddleware(app1, {
    '/api/app2': app2
})
  1. 启动命令(worker总数设为2+4=6,可根据实际负载调整):
gunicorn -w 6 wsgi_entry:application

这种方式下,所有请求通过同一端口进入,中间件会根据预设规则把请求转发给对应的应用,worker资源统一管理,也能满足你的需求。

内容的提问来源于stack exchange,提问作者coin cheung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:40:02