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

如何通过FastAPI挂载多个Gradio应用?解决端点404问题

解决FastAPI挂载多个Gradio应用的404问题

你的代码核心问题是变量覆盖导致挂载失效:

  • 你先执行了app.mount('/debug', sub_app),此时挂载的是一个空的FastAPI实例;
  • 之后sub_app = gr.mount_gradio_app(...)让变量指向了新的、带有Gradio应用的对象,但主app挂载的还是最初那个空实例,所以访问/debug会返回404。

修正后的代码

调整挂载顺序,先给子应用配置Gradio,再挂载到主应用:

from fastapi import FastAPI
from functools import partial
import gradio as gr

app = FastAPI()

def out(text, n):
    return text + '!'*n

def make_simple_gr_app(n):
    func = partial(out, n=n)
    with gr.Blocks() as dbg:
        textbox = gr.Textbox(max_lines=1, label='Enter text')
        submit_btn = gr.Button('Submit')
        submit_btn.click(func, inputs=textbox, outputs=textbox)
    return dbg

# 先配置子应用的Gradio,再挂载到主应用的/debug路径
sub_app = gr.mount_gradio_app(FastAPI(), make_simple_gr_app(1), '/')
app.mount('/debug', sub_app)

# 配置主应用根路径的Gradio
app = gr.mount_gradio_app(app, make_simple_gr_app(5), '/')

更简洁的写法

可以直接在挂载时完成子应用的创建和配置,省去单独的变量:

from fastapi import FastAPI
from functools import partial
import gradio as gr

app = FastAPI()

def out(text, n):
    return text + '!'*n

def make_simple_gr_app(n):
    func = partial(out, n=n)
    with gr.Blocks() as dbg:
        textbox = gr.Textbox(max_lines=1, label='Enter text')
        submit_btn = gr.Button('Submit')
        submit_btn.click(func, inputs=textbox, outputs=textbox)
    return dbg

# 直接创建并挂载带Gradio的子应用到/debug
app.mount(
    '/debug',
    gr.mount_gradio_app(FastAPI(), make_simple_gr_app(1), '/')
)

# 挂载根路径的Gradio应用
app = gr.mount_gradio_app(app, make_simple_gr_app(5), '/')

修改后,localhost:8000和localhost:8000/debug都能正常加载对应的Gradio应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:18:29