gpt4 book ai didi

python - caching.memoize & response_filter 内部服务器错误

转载 作者:行者123 更新时间:2023-12-04 09:36:28 25 4
gpt4 key购买 nike

我正在使用 flask_caching 来缓存我的 flask API 的响应。我在这样的路线上使用装饰器

import random
class Status(Resource):
@cache.memoize(timeout=60) # cache for a minute
def post(self):

return random.randint(0, 5)

这将在一分钟内返回相同的随机数。但是,如果随机函数(读取:“路由中的任何功能”)中断,并且路由返回 500 内部服务器错误怎么办?据我所知,flask_caching 会对此进行缓存,并在一分钟内为所有进一步的调用返回错误响应,这不是我想要的。

我读了这篇文章并找到了 response_filter 参数,它可以很容易地添加到装饰器中,似乎专门用来防止这种情况发生(“有助于防止代码 500 响应的缓存。”,来自文档:

https://flask-caching.readthedocs.io/en/latest/api.html?highlight=response_filter#flask_caching.Cache.memoize )

@cache.memoize(timeout=60, response_filter=callable_check_for_500(???))

但是,我无法找到此用例的示例。它说“如果可调用函数返回 False,则不会缓存内容。” - 我如何实现这个可调用来检查状态代码是否为 500?任何链接或想法表示赞赏

最佳答案

我找到了“解决方案”,但我并不完全满意

基本上,check_500() 函数默认获取参数 resp,但它不是完整的响应对象,不幸的是缺少 status_code 属性,正如我预期的那样。

状态码本身就在数据中,我只看响应的最后一个条目,也就是返回的所有数据。在我的例子中,它只是作为 [0] 返回的 json,以及 [-1] 的 status_code。

目前实现如下:

  @cache.memoize(timeout=60, response_filter=check_500)  # cache for a minute

使用上面定义的可调用 check_500 函数

def check_500(resp):
if resp[-1] == 500:
return False
else:
return True

这与评论中建议的 above_c_level 非常相似,所以非常感谢,但是我建议查看响应的最后一个索引,而不是检查响应数据中是否有 500。看起来仍然有点靠不住,如果有人有更详细的想法,请随时发布另一个答案。

关于python - caching.memoize & response_filter 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62558398/

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