You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-RESTPlus Resource类生命周期及@cached_property可用性问询

结论

你完全可以在Flask-RESTPlus Resource 子类中使用 @functools.cached_property 实现单请求内缓存、不跨请求留存的需求。

核心原理

  • Flask-RESTPlus的Resource类继承自Flask-RESTful的同名基类,框架默认设计为:每收到一个路由到对应资源的HTTP请求,就会创建一个全新的Resource子类实例处理该请求,请求处理完成后实例就会被销毁,不会被其他请求复用,刚好匹配你提到的第一种场景。
  • @functools.cached_property是实例级别的缓存,缓存的值只会存储在当前实例的属性中,不同实例之间的缓存完全隔离。每个请求对应独立的实例,自然就实现了缓存仅在单请求内生效、不跨请求留存的效果,且单请求内多次访问该属性只会执行一次计算逻辑。

代码示例

from functools import cached_property
from flask_restplus import Resource, Api

api = Api()

@api.route('/demo')
class DemoResource(Resource):
    @cached_property
    def heavy_compute_result(self):
        # 此处放置高开销逻辑,比如复杂计算、数据库关联查询、第三方接口调用等
        print("执行高开销计算")
        return {"key": "value"}

    def get(self):
        # 第一次访问触发计算,控制台会打印“执行高开销计算”
        res1 = self.heavy_compute_result
        # 第二次访问直接读取缓存,不会重复触发计算
        res2 = self.heavy_compute_result
        return res1

你可以自行运行上述代码测试,每次请求只会打印一次日志,多次请求之间的缓存互不干扰。


内容的提问来源于stack exchange,提问作者scanny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:24:03