У меня есть бессерверная лямбда на AWS, которая проходит по циклу данных (pandas) и для каждого отдельного индекса вызывает другую лямбду (через SNS), которая выполняет фактическую обработку.Фактическая обработка может занять несколько секунд, чтобы приблизиться к минуте.
Я попытался поместить в цикл таймер сна. Фрейм данных имеет около 2000 строк и 3 столбца.Таким образом, за 15 минут будет сделано около 2000 лямбда-звонков.
Если сон слишком длинный, лямбда верхнего уровня не заканчивается в течение 15 минут.Если сон слишком низкий, то время ожидания отдельной лямбды может быть вызвано слишком большим количеством одновременных лямбд.(Кроме того, лямбды читают json-файл, который довольно большой - около 30 МБ из объекта S3)
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)
Я рассмотрел разделение фрейма данных и обработку их отдельно.Но мне интересно, есть ли более простой способ добиться этого?