未提供项目描述
项目描述
Memoized Lambda
MemoizedLambda是一个类,它为Boto3 Lambda客户端提供了一个具有请求去重和响应记忆的异步调用接口。
用法
首先,创建一个缓存以进行记忆化
from cachetools import TTLCache
cache = TTLCache(ttl=60, maxsize=1024)
该缓存可以是任何实现了collections.abc.MutableMapping
的对象。
然后,为某个AWS Lambda函数创建一个lambda客户端和一个记忆化的lambda
import boto3
from memoized_lambda import MemoizedLambda
client = boto3.client("lambda")
mlambda = MemoizedLambda(lambda_client=client, function_name="function", cache=cache)
最后,调用lambda函数
import asyncio
loop = asyncio.get_event_loop()
coro = asyncio.gather(mlambda.invoke({}), mlambda.invoke([]), mlambda.invoke({}))
loop.run_until_complete(coro)
invoke
返回响应有效负载,或在错误时抛出MemoizedLambdaError
异常。对于给定的输入第一次调用将调用lambda,而对于相同输入的后续调用将从缓存中读取响应有效负载。在上面的示例中,lambda分别对{}
和[]
调用了两次。
请求和响应有效负载使用可配置的转换函数进行转换,默认为JSON序列化和反序列化。如果要覆盖它们,请使用可选的request_transform
和response_transform
参数
mlambda = MemoizedLambda(
lambda_client=client,
function_name="function",
cache=cache,
request_transform=lambda x: x,
response_transform=lambda x, y: y)
response_transform
函数接收请求和响应有效负载作为参数。
如果要避免缓存某些响应,请使用可选的cache_filter
参数
mlambda = MemoizedLambda(
lambda_client=client,
function_name="function",
cache=cache,
cache_filter=lambda x: not isinstance(x, Exception))
请注意,即使由响应转换引发,MemoizedLambdaError
异常也不会被缓存。