【问题标题】:AWS Lambda asynchronous function not workingAWS Lambda 异步函数不起作用
【发布时间】:2019-09-17 03:48:46
【问题描述】:

我有 50 个 lambda 函数。现在我编写了一个脚本,每 15 分钟调用一次这 50 个函数,如下所示:

import boto3
import pickle

def Handler(event, context):

    #read exams functions from pickle
    with open('result.pickle', 'rb') as file:
        all_functions = pickle.load(file)
        functions = all_functions['func']
        print('check functions')

    for items in functions:
        if 'FromDB' in items:
            print(items)
            lambda_client = boto3.client('lambda')
            response = lambda_client.invoke(FunctionName = items, InvocationType = 'Event')
            print(response)
        else:
            continue

我创建了一个部署包,其中包含 boto3 包和 pickle 文件。当我在 lambda 管理控制台中执行此操作时,我注意到两件事:

  1. check functions 在日志中打印两次,尽管只有一次打印

  2. 日志显示执行的 1 个或 2 个函数。它不会打印所有函数,这意味着这些函数永远不会被调用。

然而,这个脚本在 24 秒内在我的本地机器上运行,并且所有功能都完美执行。有人可以帮我在 AWS 上运行这个脚本吗?

我的泡菜文件:

with open('result.pickle', 'rb') as file:
    all_functions = pickle.load(file)
    functions = all_functions['func']
print(functions)

{'myfunc_1', 'myfunc_2', 'myfunc_3', 'myfunc_4', 'myfunc_5'}

以上是要调用的 aws lambda 函数本身

【问题讨论】:

  • 您的 pickle 文件可能包含 lambda 函数本身。如果是这种情况,它可能会成为重复调用的牺牲品,因此永远不会真正正确终止。最终,AWS 可能会负责终止它。如果以上不是问题,发布您的泡菜文件的内容会更有帮助
  • “你的 pickle 文件可能包含 lambda 函数本身”——这是什么意思?

标签: amazon-web-services aws-lambda boto3


【解决方案1】:

确保 lambda 函数的执行超时时间足够长,以便它有时间调用所有其他 lambda。

【讨论】:

  • 调用类型为“事件”。不应该等待函数完成
  • 我从来没有说过它应该等到函数完成,我说你的 lambda 可能在它可以执行你的所有代码之前超时。
  • 所以超时设置为 900 秒。同样的事情也可以在 24 秒内在我的笔记本电脑上运行
猜你喜欢
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多