2016-04-26 5 views
0

SimpleCahceフレームワークを使用してFlaskのバックグラウンドプロセスからキャッシュ変数を設定したいとします。つまり、Flaskのバックグラウンドプロセスからキャッシュを設定する

from rq import Queue 
from worker import conn 
from werkzeug.contrib.cache import SimpleCache 
cache = SimpleCache() 

app = Flask(__name__) 
q = Queue(connection=conn) 

# background process to be run. located in a seperate file 
def test(): 
    for i in range(10): 
     cache.set("value", i, 3600) 
     time.sleep(1) 

@app.route('/') 
def home(): 
    cache.clear() 
    q.empty() 
    q.enqueue(test, timeout=1000) 
    return jsonify({'state':"running"}) 

@app.route('/current_value') 
def get_value(): 
    return jsonify({'value':cache.get("value")}) 

ただし、これは常にnullを返します。私はRedisを使う前にこれをやったことがありますが、SimpleCacheで許可されていないバックグラウンドプロセスでキャッシュを設定していますか?それとも、何か間違っているだけですか?

答えて

0

Werkzeug's SimpleCache isn't thread safe.ロックを実装していないため、他のスレッドやプロセスでは使用できません。

また、ドキュメントにはキャッシュがプロセスメモリに格納されているように見えるので、メインプロセスのキャッシュをセカンダリキャッシュから変更することは非常に困難です。

+0

スレッドセーフな推奨(単純な)キャッシュ方法をご存知ですか? – Ben

+0

あなたはすでにあなたの質問でそれを言った:Redis。またはmemcache、データベースなど – davidism

+1

複数のプロセスからキャッシュを変更する必要がある場合は、Redisのような専用キャッシュサーバーを使用する必要があります。 –

関連する問題