You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Gunicorn超时设置问题:如何延长超时时间?

Gunicorn超时设置问题:如何延长超时时间?

兄弟,你的Gunicorn命令里的--timeout 300参数本身是正确的,但你遇到的504 Gateway Time-out大概率不是Gunicorn本身的问题,而是前端反向代理(比如Nginx)的超时限制在搞鬼!咱们一步步来排查解决:

1. 先确认Gunicorn的超时是否生效

先排除Gunicorn本身的问题,你可以写一个测试接口模拟长时间处理:

from fastapi import FastAPI
import time

app = FastAPI()

@app.get("/test-timeout")
async def test_timeout():
    time.sleep(300)  # 模拟5分钟的后台处理
    return {"status": "success", "message": "处理完成"}

然后直接通过Gunicorn的端口(比如8000)用curl调用:

curl http://localhost:8000/test-timeout

如果这个请求能正常返回结果,说明Gunicorn的--timeout 300已经生效,问题出在前端的网关/代理上;如果Gunicorn这边直接返回超时错误,那你再检查Gunicorn的日志,看有没有worker被强制杀掉的记录(比如Worker exited due to signal 9),这时候可能需要确认参数是否正确传递,或者Gunicorn版本有没有特殊问题。

2. 重点调整反向代理(比如Nginx)的超时配置

504错误本质是网关(比如Nginx)等不及后端Gunicorn的响应,提前断开了连接。你需要在Nginx的server配置块里添加以下超时参数:

# 代理相关超时
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;

# 如果用了fastcgi协议(较少见),也要加对应超时
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;

修改后重启Nginx:

sudo systemctl restart nginx

3. 额外注意事项

  • 如果你用了其他网关、负载均衡(比如Cloudflare、AWS ALB等),也要同步调整这些服务的超时时间,确保整个链路的超时都大于你的后台处理时间;
  • 你的--keep-alive 300是设置长连接的保持时间,和请求处理超时无关,但这个配置本身没问题;
  • 如果你的后台处理是异步任务,建议考虑用Celery之类的任务队列来异步处理,前端返回任务ID,之后轮询结果,这样不用让HTTP请求一直挂着,更稳定。

备注:内容来源于stack exchange,提问作者CoronaVirus

火山引擎 最新活动