使用Python制作异步AWS Lambda函数

时间:2020-06-03 16:19:40

标签: python asynchronous aws-lambda

我正在考虑在aws lambda中开火并忘记函数调用。

我正在使用FASTAPI

我已完成以下操作:

SELECT  r.RESERVATION_ID, r.RESERVATION_DATE, c.CUSTOMER_ID, c.FIRST_NAME,t.TRIP_ID, o.TRIP_DATE,TP.CATEGORY_NAME
FROM CUSTOMER c 
INNER JOIN RESERVATION r ON r.CUSTOMER_ID=c.CUSTOMER_ID
INNER JOIN TOURTRIP_RESERVATION t ON r.RESERVATION_ID=t.RESERVATION_ID
INNER JOIN TOUR_TRIP O ON t.TRIP_ID=o.TRIP_ID
LEFT JOIN TOUR_SITES TS ON TS.TOUR_SITEID =  O.TOUR_SITEID
INNER JOIN TOUR_PACKAGE TP ON TP.CATEGORY_ID = TS.CATEGORY_ID 
WHERE AGENT_ID IS NULL;

我期望process_trigger_data函数像火灾一样被遗忘,但是正在发生的事情是我的lambda函数正在等待process_trigger_data在“返回响应”之前完全执行。

我该怎么做,以至于忘却了函数调用? 我试过创建一个process_trigger_data的api函数,以便它应该运行另一个aws实例,但是我得到的结果是一样的,它在返回响应之前等待完成

我应该怎么做?

谢谢

1 个答案:

答案 0 :(得分:0)

因此,当您在Lambda中执行任务时,它将等待所有进程完成才执行/或超时。

有两种方法可以解决这个问题。

1)您可以使用SNS发布带有其他Lamdba订阅的有效负载的消息。

这个问题的陷阱是,如果您的函数变得很忙,那么Lambda可以默认扇出很多-如果您有来自这些Lambda的数据库连接,那么它可以最大程度地增加连接池。

2)如果可能有很多这样的任务,SQS是一个更好的选择,因为使用您的Lambda会尽可能快地处理消息而不会大张旗鼓。

我建议使用SQS:https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

SNS文档在这里:https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html