0

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

我想有两种可能:

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

对象/实例上的缓存仅适用于案例 1。@cached_property实际上是一个惰性计算的实例变量,其值在首次使用时计算并存储在实例变量中,然后在每次连续访问/调用时从该变量提供服务。我希望该机制实际上是一个描述符,但概念是相同的。

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

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

4

1 回答 1

1

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

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

于 2022-02-08T18:55:09.007 回答