我正在编写一个REST API GET端点,该端点需要向GCP Cloud SQL(MySQL(返回响应并存储记录,但我希望返回不依赖于记录写入的完成。基本上,我的代码看起来像:
def predict():
req = request.json.get("instances")
resp = make_response(req)
write_to_bq(req)
write_to_bq(resp)
return resp
有没有什么简单的方法可以用云SQL客户端库或其他东西做到这一点?
使我们的烧瓶具有满足我要求的功能:
@app.route("predict", method=["GET"]):
def predict():
# do some stuff with the request.json object
return jsonify(response)
@app.after_request
def after_request_func(response):
# do anything you want that relies on context of predict()
@response.call_on_close
def persist():
# this will happen after response is sent,
# so even if this function fails, the predict()
# will still get it's response out
write_to_db()
return response
一件重要的事情是,用after_request
标记的方法必须接受一个参数并返回flask.Response
类型的东西。此外,我认为如果方法有call_on_close
标记,您就不能从main方法的上下文访问,所以您需要在after_request
标记的方法内部但在call_on_close
方法外部(在上面(定义您想从main方法使用的任何内容。