我有一个云函数(Python),它是由http
从web客户端触发的,它必须计算一些东西并响应FAST。我想将http
请求参数保存到数据库中(用于分析)。
如果我只是启动一个写到我的postgresql
,函数将不得不等待它,它将是慢.
使用PubSub,函数还需要发布并等待响应(文档示例):
# 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
函数被调用时一个pubSub
我如何从函数中获取信息并将其保存到我的DB(任何DB)而不影响函数执行。
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,并激活always on CPU参数。
该参数的设计目的是:即使在请求处理上下文之外,也要在后台继续进程
编辑1
你也可以通过云函数来想象一个异步机制。同步函数从用户那里获取数据,在PubSub中发布消息并回复用户。
PubSub消息发布非常快,不会占用太多时间。
然后编写另一个函数,监听PubSub主题并将消息数据保存到数据库中。因为这个函数是异步的,所以你没有时间限制。