我正在API网关后面的AWS lambda函数中编写一个应用程序
一些函数可以是异步的(协同例程),而其他函数是常规函数
我如何在“主处理程序”中处理此问题
# here I'm mapping different paths / resources to different functions
main_router = {}
main_router.update(first_router)
main_router.update(second_router)
async def main(event):
try:
payload = {}
resource = event['resource']
payload['resource'] = resource
payload['path'] = event['path']
payload['method'] = event['httpMethod']
body = event.get('body')
query_params = event.get('queryStringParameters')
if body:
payload.update(body)
if query_params:
payload.update(query_params)
if resource in main_router:
return await main_router[resource](payload)
return "not in main router"
except Exception as e:
return str(e)
def lambda_handler(event, _context):
return asyncio.run(main(event))
如果该路径被定向到常规函数而不是异步函数则这失败,
我想要像
if regular_function:
return main_router[resource](payload)
if coroutine
return await main_router[resource](payload)
lambda处理程序只需要
return asyncio.run(main(event))
这是一个路由器的示例
postmortems_router = {
"/services": get_services, # a regular function
"/services/{proxy+}": get_specific_service, # an async def function
}
编辑:找到了一个从python端实现的方法:
import inspect
if inspect.iscoroutinefunction(main_router[resource]):
return await main_router[resource](payload)
else:
return main_router[resource](payload)
目前两者都运行得很好,lambda_handler只是
return asyncio.run(main())
我会更新后,如果我遇到任何问题,这一点
1条答案
按热度按时间2uluyalo1#
从python方面找到了一种方法:
目前两者都运行得很好,lambda_handler只是