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

如何在返回200响应后关闭Flask服务 或实现Cloud Run单实例单请求

解决方案

方案1:配置Cloud Run单实例单请求(最推荐,无需修改代码)

直接通过Cloud Run原生配置即可实现每个实例仅处理1次请求,完全不需要调整应用逻辑:

  • 部署时在gcloud命令中添加参数 --max-requests-per-container=1,或者在Cloud Run控制台的「容器、网络、安全」配置页,找到「每个容器的最大请求数」项,将值设为1
  • 同步将自动扩缩容的最小实例数设为0,实例处理完请求后会自动销毁关停,不会额外占用资源

方案2:Flask应用返回响应后主动关停(仅适用于特殊场景)

如果确实需要在代码层面控制关停,可通过Flask的after_this_request钩子保证响应先返回给客户端,再执行关停逻辑,参考适配后的代码如下:

import os
import signal
from flask import Flask, after_this_request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def main():
   #some validation on the request.json
   try:
      kick_off_terraform()
      
      @after_this_request
      def shutdown_service(response):
          # 向Gunicorn主进程发送优雅关停信号,Cloud Run部署Flask时默认用Gunicorn作为WSGI服务器
          os.kill(os.getppid(), signal.SIGTERM)
          return response
        
      return ("Success", 200)
   except Exception as e:
      print(e)
      return ("Server Error", 500)

注意:该方案仅适用于生产级WSGI服务器环境,不要在Flask自带的开发测试服务器中使用,稳定性远低于方案1,优先选择原生配置方案

补充说明

  • 由于你的业务逻辑包含Terraform执行,需要根据实际执行时长调整Cloud Run的请求超时时间,默认超时为5分钟,最长可配置为60分钟,避免任务未完成就被强制终止
  • 建议为Cloud Run实例配置足够的CPU和内存资源,避免Terraform执行过程中因资源不足报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:57:01