【发布时间】:2020-06-03 16:19:40
【问题描述】:
我正在考虑在 aws lambda 中进行一次触发并忘记函数调用。
我正在使用 FASTAPI
我做了以下事情:
from fastapi import APIRouter, BackgroundTasks
router = APIRouter()
@router.post('/post_trigger_data')
async def post_trigger_data(trigger_data: TriggerData, background_tasks: BackgroundTasks):
data = {
'uuid': trigger_data.uuid,
'status': 'Initializing',
'status_message': '',
'form_body': trigger_data.data
}
utils.post_data_to_dynamo_db('TriggerProcessingTableName', data)
background_tasks.add_task(process_trigger_data, trigger_data.uuid) # This is where it should fire and forget
return response
def process_trigger_data(uuid: str):
time.sleep(10)
data = {'data': 'RUN 1', 'uuid': uuid, 'status': 'Pending'}
utils.post_data_to_dynamo_db('TriggerProcessingTableName', data)
time.sleep(10)
data = {'data': 'RUN 2', 'uuid': uuid, 'status': 'OK'}
utils.post_data_to_dynamo_db('TriggerProcessingTableName', data)
return data
我希望 process_trigger_data 函数被执行为火灾并忘记,但发生的是我的 lambda 函数正在等待 process_trigger_data 在“返回响应”之前完全执行。
我应该怎么做才能触发并忘记函数调用? 我已经尝试创建 process_trigger_data 的 api 函数,以便它应该运行另一个 aws 实例,但我得到相同的结果,它在返回响应之前等待完成
我应该怎么做?
谢谢
【问题讨论】:
标签: python asynchronous aws-lambda