我读了很多关于关闭Flask应用程序的不同方法的文章,但我不知道如何为我的用例实现一些东西。
我编写并正在测试一个简单的Flask应用程序,该应用程序接受POST请求在谷歌云中创建一些资源。此Flask应用程序已部署到一个容器中,并且正在Cloud Run上运行。
我的问题是,我想在收到200个响应后立即关闭应用程序,或者有办法处理每个Cloud Run实例的一个请求吗?
app = Flask(__name__)
@app.route('/', methods=['POST'])
def main():
#some validation on the request.json
try:
kick_off_terraform()
return ("Success", 200)
except Exception as e:
print(e)
经过一些研究,我发现我可以控制GCP端的并发,这样我在Cloud Run上每个实例只能允许一个请求。
gcloud run deploy $SERVICE_NAME
--image gcr.io/$GCP_PROJECT_ID/$SERVICE_NAME:$CI_COMMIT_SHORT_SHA
--region=us-east1
--platform managed
--concurrency=1
遗憾的是,像--concurrency=1
或--max-instances=1
这样的黑客攻击并不好,因为在请求后关闭服务器可能会导致请求失败。(当我过去这样做的时候,请求失败了。(
根据你的问题,我猜你可能还没有完全理解Cloud Run运行时的行为。请注意:
- 你不需要"关闭";Cloud Run上的容器。一旦所有请求完成,它就会自动挂起,甚至不会对请求之外的空闲时间收取费用
- 像
kick_off_terraform()
这样的操作不能在后台进行(必须在返回响应之前完成(,因为Cloud Run目前没有在后台分配CPU
你需要的是像";运行至完工容器";您可能需要等待一段时间才能得到Cloud Run的支持。