跳转到主要内容

未提供项目描述

项目描述

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_transformresponse_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异常也不会被缓存。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

memoized-lambda-0.1.tar.gz (8.4 kB 查看哈希值)

上传时间

构建分发

memoized_lambda-0.1-py3-none-any.whl (7.9 kB 查看哈希值)

上传时间 Python 3