Flask-RESTPlus 资源 class 的生命周期是多少?

What is lifetime of Flask-RESTPlus Resource class?

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

我认为有两种可能:

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

object/instance 上的缓存仅适用于情况 1。@cached_property 实际上是一个延迟计算的实例变量,其值在首次使用时计算并存储在实例变量中,然后提供来自每个连续 access/call 的变量。我希望机制实际上是一个描述符,但概念是一样的。

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

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

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

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