代码是这样的(我正在使用flask和flask-cache,但这可能是一个普遍的问题):
@cache.memoize(500000)
def big_foo(a,b):
return a + b + random.randrange(0, 1000)
如果我在Python intepreter中运行它,我可以通过调用big_foo(1,2)
来获得相同的结果。
但是如果我在应用程序中添加此函数并使用mod_wsgi
守护进程,则在浏览器中请求。 (在该请求的views函数中调用big_foo
)。我发现每次结果都不一样。
我认为结果每次都不同,因为mod_wsgi
使用多个流程来启动应用。每个进程可能都有自己的缓存,并且进程之间无法共享缓存。
我猜对了吗?如果正确,我如何为全局访问分配一个且仅一个缓存?如果没有,我的代码出错了?
以下是用于flask-cache
UPLOADS_FOLDER = "/mnt/Storage/software/x/temp/"
class RadarConfig(object):
UPLOADS_FOLDER = UPLOADS_FOLDER
ALLOWED_EXTENSIONS = set(['bed'])
SECRET_KEY = "tiananmen"
DEBUG = True
CACHE_TYPE = 'simple'
CACHE_DEFAULT_TIMEOUT = 5000000
BASIS_PATH = "/mnt/Storage/software/x/NMF_RESULT//p_NMF_Nimfa_NMF_Run_30632__metasites_all"
COEF_PATH = "/mnt/Storage/software/x/NMF_RESULT/MCF7/p_NMF_Nimfa_NMF_Run_30632__metasample_all"
MASK_PATH = "/mnt/Storage/software/x/NMF_RESULT/dhsHG19.bed"
答案 0 :(得分:4)
这是你的问题:CACHE_TYPE = 'simple'
。来自SimpleCache
documentation:
单个进程环境的简单内存缓存。该类主要用于开发服务器,并非100%线程安全。
对于生产而言,更适合的后端是memcached
,redis
和filesystem
,因为它们旨在在并发环境中工作。