如何从 Cloud Functions 触发异步作业

How to trigger async job from a Cloud Function

我有一个由 Web 客户端 http 触发的云函数 (Python),它必须计算一些东西并响应 FAST。我想将 http 请求参数保存到数据库中(用于分析)。

如果我只是对我的 postgresql 发起 WRITE,该函数将不得不等待它,并且会 变慢

使用 PubSub,Function 也需要发布并等待响应(文档示例):

   # Publishes a message
    try:
        publish_future = publisher.publish(topic_path, data=message_bytes)
        publish_future.result()  # Verify the publish succeeded
        return 'Message published.'

Google 不提供在调用 http 函数时在后台自动触发 发布订阅的解决方案

如何从我的函数中获取信息并将其保存到我的数据库(任何数据库)而不影响函数执行

def cloud_func(request):

      request_json = request.get_json()
        //save to db async without waiting for respond
        //calculate my stuff..
        return (result, 200, headers) //to client

如果您在 HTTP 中使用 Cloud Functions 触发器,我建议您迁移到 Cloud Run, and to activate the always on CPU 参数。

该参数正是为此设计的:即使在请求处理上下文之外也能在后台继续进程


编辑 1

您还可以通过留在 Cloud Functions 上想象一个异步机制。同步功能从用户那里获取数据,在 PubSub 中发布一条消息并回答用户。

PubSub 消息发布速度非常快,不会占用太多时间。

然后编写另一个函数,监听 PubSub 主题并将消息数据保存到您的数据库中。因为那个函数是异步的,所以你没有时间限制。