将较大的工作拆分为较短的Lambda函数

时间:2019-06-11 08:36:10

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

我在AWS上有一个无服务器的lambda,该lambda遍历(熊猫)数据帧,并且对于每个单独的索引,调用另一个Lambda(通过SNS)进行实际处理。实际处理可能需要几秒钟才能接近一分钟。

我尝试将睡眠计时器放入循环中。数据帧有大约2000行和3列。因此,在15分钟内将进行大约2000个Lambda调用。

如果睡眠时间太长,则顶级lambda不能在15分钟内完成。如果睡眠时间太短,则单个lambda超时,可能是因为调用了太多并发lambda。 (此外,lambda读取的json文件很大-从S3对象大约30MB)

def invoke_controller(event, context):

    if event != '':
        message = json.loads(event['Records'][0]['Sns']['Message'])
        function_name = message.get('function_name','DoSomething')

    sns_arn = sns_arn_prefix + function_name

    for index, row in dataframe.iterrows():
        print('Publishing data for {} to SNS ({})'.format(row.Id, function_name))
        client = boto3.client('sns')
        response = client.publish(
            TopicArn=sns_arn,
            Message=json.dumps(dict(row)),
        )
        time.sleep(sleep_time)

我已经考虑过拆分数据帧并分别处理它们。但是我想知道是否有更简单的方法来实现这一目标?

0 个答案:

没有答案