金字塔中到外部服务(redis)的连接池
Connection pool to external services (redis) in pyramid
我需要为 redis 创建一个全局连接池 redis.BlockingConnectionPool
初始化它的最佳方法是什么以及在何处进行初始化。所以我可以随时访问它们,并且这些连接可以始终打开以进行非常快速的访问。我找到了两种方法:
- 这样使用配置注册表
#__init__.py
def make_wsgi_app(settings, **kwargs):
...
config = Configurator(settings=settings)
config.registry.connection_pool = redis.BlockingConnectionPool()
- 使用全局模块常量
#myredis.py
RedisConnectionPool = BlockingConnectionPool()
#__init__.py
import myredis
def make_wsgi_app(settings, **kwargs):
...
我是金字塔的新手,真的不知道在每种情况下如何共享这个池以及它们有何不同。任何见解将不胜感激。
需要明确的是,redis 不会用作会话后端等。它会用作一种 IPC。在哪里安排作业,在哪里存储它们的结果。
推荐的方法是在注册表中存储一个连接池。然后每个请求都可以通过 request.registry.connection_pool
从那里获取连接并执行其操作。由于全局变量不好的所有标准原因,这总是比使用全局模块更可取。
我需要为 redis 创建一个全局连接池 redis.BlockingConnectionPool
初始化它的最佳方法是什么以及在何处进行初始化。所以我可以随时访问它们,并且这些连接可以始终打开以进行非常快速的访问。我找到了两种方法:
- 这样使用配置注册表
#__init__.py
def make_wsgi_app(settings, **kwargs):
...
config = Configurator(settings=settings)
config.registry.connection_pool = redis.BlockingConnectionPool()
- 使用全局模块常量
#myredis.py
RedisConnectionPool = BlockingConnectionPool()
#__init__.py
import myredis
def make_wsgi_app(settings, **kwargs):
...
我是金字塔的新手,真的不知道在每种情况下如何共享这个池以及它们有何不同。任何见解将不胜感激。
需要明确的是,redis 不会用作会话后端等。它会用作一种 IPC。在哪里安排作业,在哪里存储它们的结果。
推荐的方法是在注册表中存储一个连接池。然后每个请求都可以通过 request.registry.connection_pool
从那里获取连接并执行其操作。由于全局变量不好的所有标准原因,这总是比使用全局模块更可取。