【问题标题】:Flask `before_request` context functions on Google Cloud FunctionsGoogle Cloud Functions 上的 Flask `before_request` 上下文函数
【发布时间】:2020-03-27 18:14:35
【问题描述】:

我正在尝试在 Google Cloud Functions 上使用 Flask 上下文类和函数。这是我正在尝试做的简单代码:

import time
from flask import request, jsonify, g

@app.before_request
def before_request():
    g.start = time.time()

@app.after_request
def after_request(response):
    if ((response.json) and (response.response) and (200 <= response.status_code < 300)):
        response.json['execution_time'] = time.time() - g.start
        response.set_data(bytes(json.dumps(response.json), 'utf-8'))
    return response

def hello_world(request):
    response = jsonify({"status": "success", "message": "Hello World!"})
    response.status_code = 200
    return response

我尝试删除 app. 并仅使用 @before_request,但这似乎不起作用。知道这是否受支持?

另外,是的,我知道我可以在我的每个响应中添加一个 execution_time 参数,但是 a) 全局设置它会很好,并且 b) before_request 还有其他用例和after_request 函数。

谢谢!

【问题讨论】:

    标签: python flask google-cloud-platform google-cloud-functions


    【解决方案1】:

    目前无法在 Cloud Functions 中的函数上下文之外进行操作。 Cloud Functions 无权访问底层 app

    您可能需要考虑改用Cloud Run,这样您就可以定义一个完整的Flask app 并使用@app.before_request@app.after_request

    【讨论】:

    • 谢谢,达斯汀!是的,我正在将 Cloud Run 用于其他一些事情,并且我正在将一些代码从那里移动到 Cloud Functions 以提高它们的效率。那是我无法开始工作的代码的一部分。这不是什么大不了的事,但我认为值得一问以确保。
    • 我很好奇您所说的“更高效”是什么意思——Cloud Functions 和 Cloud Run 提供非常相似的效率。
    • 嗯,Cloud Run 与 Cloud Functions 相比,开销要大得多。虽然 Cloud Run 相当快,但在 Cloud Functions 提供的 Flask 后端上减脂并使用简单的函数势必会更快、更高效。
    • 在幕后,Cloud Functions 将您的函数包装在 Flask 应用中,并将其部署到与 App Engine / Cloud Run 非常相似的环境中。效率主要在于最大限度地降低开发人员的复杂性,而不是运行时或内存等。
    • 哦,我知道 - 我明白这一点。但是,与在 Cloud Functions 上执行独立功能相比,在 Cloud Run 上启动容器仍然需要更多的架构层。最小?当然。值得考虑吗?绝对的。
    猜你喜欢
    • 2020-11-03
    • 2020-03-19
    • 2020-09-25
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多