gpt4 book ai didi

python - 将计算存储在 Flask 路由缓存中

转载 作者:行者123 更新时间:2023-12-01 04:14:46 26 4
gpt4 key购买 nike

我有一个很长的任务进入 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)

这应该可以很好地缓存。

您可以使用 Cache.memoize() decorator 来内存 find_keyword 函数的结果。 :

@cache.memoize(30 * 24 * 60 * 60)
def find_keyword(keyword):
# ....

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

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

@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)

关于python - 将计算存储在 Flask 路由缓存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com