如何从 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 主题并将消息数据保存到您的数据库中。因为那个函数是异步的,所以你没有时间限制。
我有一个由 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 主题并将消息数据保存到您的数据库中。因为那个函数是异步的,所以你没有时间限制。