在 API 调用期间将记录插入 BigQuery 或某些 RDB
Insert Record to BigQuery or some RDB during API Call
我正在编写一个 REST API GET 端点,它需要 return 响应并将记录存储到 GCP Cloud SQL (MySQL),但我希望 return 不依赖于记录写入的完成。基本上,我的代码将如下所示:
def predict():
req = request.json.get("instances")
resp = make_response(req)
write_to_bq(req)
write_to_bq(resp)
return resp
是否有任何简单的方法可以使用 Cloud SQL Client Library 或其他东西来做到这一点?
原来我们的烧瓶具有满足我要求的功能:
@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
标记的方法必须采用参数和 return 类型 flask.Response
的东西。另外我认为如果方法有 call_on_close
标签,你不能从 main 方法的上下文访问,所以你需要在 after_request
标记的方法内部但在外部(上面)定义你想从 main 方法使用的任何东西call_on_close
方法。
我正在编写一个 REST API GET 端点,它需要 return 响应并将记录存储到 GCP Cloud SQL (MySQL),但我希望 return 不依赖于记录写入的完成。基本上,我的代码将如下所示:
def predict():
req = request.json.get("instances")
resp = make_response(req)
write_to_bq(req)
write_to_bq(resp)
return resp
是否有任何简单的方法可以使用 Cloud SQL Client Library 或其他东西来做到这一点?
原来我们的烧瓶具有满足我要求的功能:
@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
标记的方法必须采用参数和 return 类型 flask.Response
的东西。另外我认为如果方法有 call_on_close
标签,你不能从 main 方法的上下文访问,所以你需要在 after_request
标记的方法内部但在外部(上面)定义你想从 main 方法使用的任何东西call_on_close
方法。