Google Cloud 运行 如何处理异步调用?

How does Google Cloud Run handle Async Calls?

Google Cloud 运行 如何处理具有长运行ning 异步代码的 Flask 应用程序?这种情况似乎没有很好的记录。

具体来说,我想 运行 类似于下面的代码。会发生什么?如果没有请求进入,它会在飞行中终止吗?它会 运行 完成然后缩放到零吗?

@app.route('/ImportVendorProducts')
def import_vendor_products():
    try:
        t = Thread(target=import_wtc_products)
        t.start()
        response = Response(response=f"Started import_wtc_products", status=202)
    except:
        response = Response(response=f"import_wtc_products failed", status=500)
    return response

您的容器将 CPU 仅在 HTTP 请求期间分配。

因此在您返回并提供响应的那一刻,CPU 被带走,后台调用将不会执行。

无服务器产品(Cloud 运行、Cloud Functions、App Engine Standard)使用考虑 CPU、内存和请求的启发式方法跟踪可用容量。如果没有请求,它还会将应用程序标记为空闲。后台工作会导致 CPU 被消耗(并且整个应用程序正在被使用),但可能没有请求到达实例。 “应用程序繁忙度”的这种错位可能会导致对创建或终止的实例数量做出错误的决定,从而导致如下行为:

  • 该应用扩展的实例过多(超过并发请求保证),导致费用增加。发生这种情况是因为 CPU 负载过高,即使没有请求,系统也会创建比需要更多的实例。
  • 应用的长期 运行 作业(后台作业)被自动缩减过早终止。

对于简短的 运行 任务,您可以 utilize Cloud Tasks along with Cloud Run 进行异步工作,因为它设计用于在用户或服务到服务请求之外工作。

附加参考:https://cloud.google.com/run/docs/tips/general#avoiding_background_activities