0

コードは次のようになります(私はflaskとflask-cacheを使用していますが、これは一般的な問題である可能性があります):

@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複数のプロセスを使用してアプリを起動するため、結果は毎回異なると思います。各プロセスには独自のキャッシュがある場合があり、プロセス間でキャッシュを共有することはできません。

私の推測は正しいですか?正しい場合、グローバルアクセス用に1つだけのキャッシュを割り当てるにはどうすればよいですか?そうでない場合、私のコードのどこが間違っていましたか?

以下は、に使用される構成です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% スレッドセーフではありません。

本番環境により適したバックエンドはmemcachedredisおよびfilesystemです。これらは並行環境で動作するように設計されているためです。

于 2013-01-09T12:15:51.557 に答える