在 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 方法。