我有一个很长的任务,进入python工作队列。
@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尝试保存结果,因为它最多只需要每周运行一次,每个月运行一次也就足够了。
我遇到的问题是,当它运行时,它缓存失败的响应,而不是实际的解决方案。
还有别的办法吗?或者建议我该如何处理这件事?
发布于 2015-12-23 18:35:47
您正在尝试JSON-编码Job代理对象,而不是作业的结果。您确实希望在这里检查职务结果:
job = q.enqueue(find_keyword, keyword)
while not job.result:
time.sleep(1)
return jsonify(word=job.result)这个应该缓存得很好。
相反,您可以使用find_keyword函数回传 decorator函数的结果。
@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)https://stackoverflow.com/questions/34441613
复制相似问题