我有一个漫长的任务,即将进入python-rq工作者队列。
@cache.cached(timeout=2592000)
@app.route('/as/<keyword>', methods=['GET'])
@db_session
def auto_suggest(keyword):
job = q.enqueue(find_keyword, keyword)
while not job:
time.sleep(1)
return jsonify(word=job)
我正在flask-cache
尝试将结果保存为一个计算,该计算最多只需要每周运行一次,每月一次就足够了。
我遇到的问题是,它在运行时会缓存失败的响应,而不是实际的解决方案。
还有其他方法吗?或关于如何处理此问题的建议?
您正在尝试对Job
代理对象进行JSON编码,而不是作业的结果。您确实要在这里检查工作结果:
job = q.enqueue(find_keyword, keyword)
while not job.result:
time.sleep(1)
return jsonify(word=job.result)
这应该被缓存就好了。
您可以改为find_keyword
使用Cache.memoize()
装饰器来记住函数的结果:
@cache.memoize(30 * 24 * 60 * 60)
def find_keyword(keyword):
# ....
这将find_keyword()
完全基于keyword
参数来缓存该函数的结果一个月(不同关键词的结果被独立缓存)。
还有一点要注意:将额外的装饰器应用于视图功能时,请确保将@app.route()
装饰器放在顶部(最后应用)。任何装饰器应用的“以后”都会被忽略,因为不是其输出被注册为视图:
@app.route('/as/<keyword>', methods=['GET'])
@cache.cached(timeout=2592000)
@db_session
def auto_suggest(keyword):
job = q.enqueue(find_keyword, keyword)
while not job.result:
time.sleep(1)
return jsonify(word=job.result)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句