0

代码是这样的(我正在使用烧瓶和烧瓶缓存,但这可能是一个普遍的问题):

@cache.memoize(500000)
def big_foo(a,b):
    return a + b + random.randrange(0, 1000)

如果我在 Python 解释器中运行它,我总是可以通过调用big_foo(1,2).

但是,如果我在应用程序中添加此功能并用于mod_wsgi守护进程,则在浏览器中请求。(在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"    
4

1 回答 1

4

这是你的问题:CACHE_TYPE = 'simple'。从SimpleCache 文档

单进程环境的简单内存缓存。此类主要存在于开发服务器上,并不是 100% 线程安全的。

对于生产来说,更适合的后端是memcached,redisfilesystem,因为它们被设计为在并发环境中工作。

于 2013-01-09T12:15:51.557 回答