我在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)
我已经考虑过拆分数据帧并分别处理它们。但是我想知道是否有更简单的方法来实现这一目标?