我有以下示例代码。这是作为 Yandex.Functions 运行的(几乎等同于 AWS 函数)。
def handler(event, context):
# some long processing is here
text = result_of_long_processing()
return {
'response': {
'text': text
},
}
我应该按照以下方式修改代码:
long processing
花费的时间少于 3 秒,则应返回此处理的结果wait more
)并继续处理。我怎样才能实现它?
答案 0 :(得分:2)
这是作为 Yandex.Functions 运行的(几乎等同于 AWS 函数)。
我将根据这个来回答,简短的回答是你不能。
Lambda 函数在执行结束时返回一些值。一旦你返回它就不会继续执行。虽然您可以创建一个后台线程,但当主线程返回一个值时,该线程将被挂起。
这意味着您需要创建一个系统架构来支持长时间运行的任务。至少涉及:
在这样的系统中,您的“网关”功能会创建一个唯一标识符(通常是 UUID)。然后调用第二个“处理”函数,将 UUID 传递给它。
处理函数完成它的工作,并将结果写入数据存储区,以 UUID 为键。
“网关”函数可以立即将该 UUID 返回给调用者,或者选择等待(轮询数据存储)您想要等待的时间。
如果“网关”完成轮询时结果不可用,则客户端必须承担责任:使用 UUID 调用“网关”,直到结果可用。