给出响应后如何继续执行函数?

2024-05-18 12:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下示例代码。这是作为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),并继续处理

我怎样才能做到呢


Tags: 函数代码textawsevent示例isdef
1条回答
网友
1楼 · 发布于 2024-05-18 12:34:16

This is run as Yandex.Functions (almost equal to AWS functions).

我将根据这个回答,简单的回答是你不能

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

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

  • 两个lambda,一个用于执行处理,另一个用于与调用方交互
  • 用于存储结果的某些位置,例如Redis缓存或数据库

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

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

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

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

相关问题 更多 >

    热门问题