【问题标题】:What is lifetime of Flask-RESTPlus Resource class?Flask-RESTPlus 资源类的生命周期是多少?
【发布时间】:2021-10-27 03:07:11
【问题描述】:

基本上,我需要知道我是否可以在 Flask-RESTPlus 中使用 @functools.cached_property Resource 子类来缓存一个昂贵的操作或协作者构造,这些操作不应超过单个请求。

我认为有两种可能:

  1. Resource 子类实例为路由到该资源的每个 HTTP 请求重新创建。
  2. Resource 子类实例在构建 API 时创建一次,并在 API 的生命周期内为路由到该资源的每个请求重用。

对象/实例上的缓存仅适用于情况 1。@cached_property 实际上是一个惰性计算的实例变量,它的值在第一次使用时计算并存储在实例变量中,然后在每次连续时从该变量提供访问/呼叫。我希望机制实际上是一个描述符,但概念是一样的。

无论如何,我需要为每个请求使用不同的值,我只需要在处理单个请求的过程中多次使用它,并且我需要为该请求只计算一次该值。

@cached_property 会在 Flask-RESTPlus Resource 子类上按我需要的方式工作吗?

【问题讨论】:

    标签: flask-restplus flask-restx


    【解决方案1】:

    为每个请求创建一个Resource 类的实例。您可以通过在其__init__() 方法中创建断点来快速验证。

    另外,考虑使用Flask.g 命名空间对象。它具有请求上下文的生命周期,通常用于存储数据库连接等,每个请求需要创建一次并在请求结束后销毁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多