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

Python 在请求的生存期内需要缓存,python,django,Python,Django,在我们的django应用程序中,我们使用相同的输入从不同的地方多次调用另一个应用程序的API 一种解决方案是在调用响应后将其存储在请求上下文中。 但是,请求上下文不会传递到调用方法中。调用方法深入控制流内部 因此,我认为另一种解决方案是将响应存储在线程本地存储中。 然而,我从一个问题中了解到,线程局部变量比请求本身持续的时间更长。我不想那样。我希望此存储的持续时间与请求本身的持续时间相同 我实现了一个decorator来包装调用函数,如下所示 import threading threadlo

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

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

因此,我认为另一种解决方案是将响应存储在线程本地存储中。 然而,我从一个问题中了解到,线程局部变量比请求本身持续的时间更长。我不想那样。我希望此存储的持续时间与请求本身的持续时间相同

我实现了一个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

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

可能与^threading.local重复,谢谢。从链接的问题来看,我想实现一个decorator,它为任何方法(而不仅仅是视图)提供每个请求的缓存。有没有一种方法可以从Django获取当前的请求对象,而不传递它?似乎与我的要求相似。我需要尝试接受的解决方案,看看它是否适合我。上述解决方案有效。谢谢