需要在请求的生命周期内缓存

时间:2014-09-18 15:03:25

标签: python django

在我们的django应用中,我们使用相同的输入从不同的地方多次调用另一个应用的API。

一种解决方案可能是在调用后将响应存储在请求上下文中。 但是,请求上下文不会传递给调用方法。调用方法深入控制流程。

因此,我认为另一种解决方案可能是将响应存储在线程本地存储中。 但是,我从问题here中了解到,线程本地的持续时间比请求本身的持续时间长。我不想要那个。我希望这个存储只能和请求本身一样长。

我实现了一个装饰器来包装调用函数,它看起来如下所示。

import threading

threadlocal = threading.local()
threadlocal.cache = {}

def cache(func):
    def inner(*args, **kwargs):
        cache_key = (args, str(kwargs))
        if cache_key in threadlocal.cache:
            return threadlocal.cache[cache_key]
        response = func(*args, **kwargs)
        threadlocal.cache[cachekey] = response
        return response
    return inner

除了threading.local,还有更好的存储机制吗?

0 个答案:

没有答案