我正在使用 aiohttp 在 python 3.4 中发出一个简单的 HTTP 请求,如下所示:
response = yield from aiohttp.get(url)
该应用程序一遍又一遍地请求相同的 URL,所以我很自然地想缓存它。我的第一次尝试是这样的:
@functools.lru_cache(maxsize=128)
def cached_request(url):
return aiohttp.get(url)
第一次调用 cached_request
工作正常,但在以后的调用中我最终得到 None
而不是响应对象。
我是 asyncio 的新手,所以我尝试了很多组合 asyncio.coroutine
装饰器, yield from
和其他一些东西,但似乎都没有用。
那么缓存协程是如何工作的呢?
原文由 tobib 发布,翻译遵循 CC BY-SA 4.0 许可协议
也许有点晚了,但我已经启动了一个可能有帮助的新包: https ://github.com/argaen/aiocache。随时欢迎贡献/评论。
一个例子:
请注意,作为额外功能,它可以使用 Pickle 序列化将任何 python 对象缓存到 redis 中。如果您只想使用内存,则可以使用
SimpleMemoryCache
后端 :)。