首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将计算存储在烧瓶路由缓存中

将计算存储在烧瓶路由缓存中
EN

Stack Overflow用户
提问于 2015-12-23 18:26:03
回答 1查看 1.3K关注 0票数 1

我有一个很长的任务,进入python工作队列。

代码语言:javascript
复制
@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尝试保存结果,因为它最多只需要每周运行一次,每个月运行一次也就足够了。

我遇到的问题是,当它运行时,它缓存失败的响应,而不是实际的解决方案。

还有别的办法吗?或者建议我该如何处理这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-23 18:35:47

您正在尝试JSON-编码Job代理对象,而不是作业的结果。您确实希望在这里检查职务结果:

代码语言:javascript
复制
job = q.enqueue(find_keyword, keyword)
while not job.result:
    time.sleep(1)
return jsonify(word=job.result)

这个应该缓存得很好。

相反,您可以使用find_keyword函数回传 decorator函数的结果。

代码语言:javascript
复制
@cache.memoize(30 * 24 * 60 * 60)
def find_keyword(keyword):
    # ....

这将将find_keyword()函数的结果缓存一个月,完全基于keyword参数(不同关键字的结果是独立缓存的)。

还要注意:当将额外的装饰器应用到视图函数时,请确保将@app.route()装饰器放在顶部(待最后应用)。任何应用“较后”的装饰器都会被忽略,因为注册为视图的不是它们的输出:

代码语言:javascript
复制
@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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34441613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档