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

2024-06-16 10:24:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

一种解决方案是在请求被调用后将响应存储在请求上下文中。 但是,请求上下文不会传递到调用方法中。调用方法在控制流的深处。你知道吗

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

我实现了一个decorator来包装调用函数,如下所示。你知道吗

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

除此之外还有更好的存储机制吗什么地方?你知道吗


Tags: 方法key应用程序cachereturnresponsedef地方