AWS Lambda支持处理程序同步和异步两种方式,但对于并发调用会有所不同。
在同步模式下,当 AWS Lambda 同时接收多个请求时,它们将被阻塞并按照顺序处理。这意味着在正常操作期间,AWS Lambda 将处理每个请求,直到完成,然后再开始处理下一个请求。
在异步模式下,AWS Lambda 将处理多个请求,因此处理程序必须是异步的。如果你在处理程序中出现一些耗时的操作,其他请求可能就会被阻塞。如果出现大规模的异步调用,你应该考虑增加并发连接数。
以下是一个处理程序函数示例:
# 同步方式
def sync_handler(event, context):
# some operations
return 'Hello from Lambda!'
# 异步方式
import asyncio
async def async_handler(event, context):
# some asynchronous operations
return 'Hello from Lambda!'
# 调用
def lambda_handler(event, context):
if context.get_remaining_time_in_millis() < 1000:
# almost out of time, use async
loop = asyncio.get_event_loop()
return loop.run_until_complete(async_handler(event, context))
else:
# still time left, use sync
return sync_handler(event, context)
在调用处理程序时,我们判断时间是否已经不多,如果是,我们使用异步处理程序,否则我们使用同步处理程序。这可以确保我们不会超出时间限制。