0

我有以下示例代码。这是作为 Yandex.Functions 运行的(几乎等于 AWS 函数)。

def handler(event, context):
    # some long processing is here
    text = result_of_long_processing()
    return {
        'response': {
            'text': text
        },
    }

我应该按以下方式修改代码:

  1. 如果long processing耗时少于 3 秒,则应返回此处理的结果
  2. 如果超过 3 秒,wait more则应返回一些标准文本(如 )并继续处理。

我怎样才能实现它?

4

1 回答 1

2

这是作为 Yandex.Functions 运行的(几乎等于 AWS 函数)。

我将基于此来回答,简短的回答是您不能。

Lambda 函数在其执行结束时返回一些值。一旦您返回,它将不会继续执行。虽然您可以创建一个后台线程,但当主线程返回一个值时,该线程将被挂起。

这意味着您需要创建一个系统架构来支持长时间运行的任务。至少包括:

  • 两个 Lambda,一个用于执行处理,一个用于与调用者交互。
  • 存储结果的某个地方,例如 Redis 缓存或数据库。

在这样的系统中,您的“网关”功能会创建一个唯一标识符(通常是 UUID)。然后它调用第二个“处理”函数,将 UUID 传递给它。

处理函数完成它的工作,并将结果写入数据存储,由 UUID 键入。

“网关”函数可以将该 UUID 立即返回给调用者,或者选择等待(轮询数据存储区)您想要等待的时间。

如果在“网关”完成轮询时结果不可用,则客户端将不得不承担责任:使用 UUID 调用“网关”,直到结果可用。

于 2021-03-30T21:02:32.133 回答