Flask-RESTPlus 资源 class 的生命周期是多少?
What is lifetime of Flask-RESTPlus Resource class?
基本上我需要知道我是否可以在 Flask-RESTPlus Resource
子类中使用 @functools.cached_property
来缓存昂贵的操作或合作者构造,这些操作或协作者构造不应在单个请求之后继续存在。
我认为有两种可能:
- 为每个路由到该资源的 HTTP 请求重新创建一个
Resource
子类实例。
Resource
子类实例在构造 API 时创建一次,并在 API 的生命周期内为路由到该资源的每个请求重用。
object/instance 上的缓存仅适用于情况 1。@cached_property
实际上是一个延迟计算的实例变量,其值在首次使用时计算并存储在实例变量中,然后提供来自每个连续 access/call 的变量。我希望机制实际上是一个描述符,但概念是一样的。
无论如何,我需要为每个请求使用不同的值,我只需要在处理单个请求的过程中多次使用它,并且我需要为该请求准确计算一次该值。
@cached_property
能否按照我需要的方式在 Flask-RESTPlus Resource
子类上工作?
为每个请求创建 Resource
class 的一个实例。您可以通过在其 __init__()
方法中创建断点来快速验证。
另外,考虑使用 Flask.g 命名空间对象。它具有请求上下文的生命周期,通常用于存储数据库连接等,每个请求需要创建一次并在请求结束后销毁。
基本上我需要知道我是否可以在 Flask-RESTPlus Resource
子类中使用 @functools.cached_property
来缓存昂贵的操作或合作者构造,这些操作或协作者构造不应在单个请求之后继续存在。
我认为有两种可能:
- 为每个路由到该资源的 HTTP 请求重新创建一个
Resource
子类实例。 Resource
子类实例在构造 API 时创建一次,并在 API 的生命周期内为路由到该资源的每个请求重用。
object/instance 上的缓存仅适用于情况 1。@cached_property
实际上是一个延迟计算的实例变量,其值在首次使用时计算并存储在实例变量中,然后提供来自每个连续 access/call 的变量。我希望机制实际上是一个描述符,但概念是一样的。
无论如何,我需要为每个请求使用不同的值,我只需要在处理单个请求的过程中多次使用它,并且我需要为该请求准确计算一次该值。
@cached_property
能否按照我需要的方式在 Flask-RESTPlus Resource
子类上工作?
为每个请求创建 Resource
class 的一个实例。您可以通过在其 __init__()
方法中创建断点来快速验证。
另外,考虑使用 Flask.g 命名空间对象。它具有请求上下文的生命周期,通常用于存储数据库连接等,每个请求需要创建一次并在请求结束后销毁。