金字塔中到外部服务(redis)的连接池

Connection pool to external services (redis) in pyramid

我需要为 redis 创建一个全局连接池 redis.BlockingConnectionPool 初始化它的最佳方法是什么以及在何处进行初始化。所以我可以随时访问它们,并且这些连接可以始终打开以进行非常快速的访问。我找到了两种方法:

  1. 这样使用配置注册表
#__init__.py
def make_wsgi_app(settings, **kwargs):
     ...
    config = Configurator(settings=settings)
    config.registry.connection_pool = redis.BlockingConnectionPool()
  1. 使用全局模块常量
#myredis.py
RedisConnectionPool = BlockingConnectionPool()
#__init__.py
import myredis
def make_wsgi_app(settings, **kwargs):
     ...

我是金字塔的新手,真的不知道在每种情况下如何共享这个池以及它们有何不同。任何见解将不胜感激。

需要明确的是,redis 不会用作会话后端等。它会用作一种 IPC。在哪里安排作业,在哪里存储它们的结果。

推荐的方法是在注册表中存储一个连接池。然后每个请求都可以通过 request.registry.connection_pool 从那里获取连接并执行其操作。由于全局变量不好的所有标准原因,这总是比使用全局模块更可取。