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

Python 金字塔中到外部服务(redis)的连接池,python,pyramid,redis-py,Python,Pyramid,Redis Py,我需要创建一个到redis的全局连接池。BlockingConnectionPool初始化此连接池的最佳方法是什么,以及在何处执行此操作。因此,我可以随时访问它们,这些连接可以随时打开,以便快速访问。我发现了两种方法: 像这样使用配置注册表 初始化 def make_wsgi_应用程序(设置,**kwargs): ... 配置=配置器(设置=设置) config.registry.connection_pool=redis.BlockingConnectionPool() 使用全局模块常量 #

我需要创建一个到redis的全局连接池。BlockingConnectionPool初始化此连接池的最佳方法是什么,以及在何处执行此操作。因此,我可以随时访问它们,这些连接可以随时打开,以便快速访问。我发现了两种方法:

  • 像这样使用配置注册表
  • 初始化
    def make_wsgi_应用程序(设置,**kwargs):
    ...
    配置=配置器(设置=设置)
    config.registry.connection_pool=redis.BlockingConnectionPool()
    
  • 使用全局模块常量
  • #myredis.py
    RedisConnectionPool=BlockingConnectionPool()
    
    初始化
    导入myredis
    def make_wsgi_应用程序(设置,**kwargs):
    ...
    
    我是金字塔的新手,不知道在每种情况下如何共享这个池以及它们之间的区别。如有任何见解,将不胜感激


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

    建议的方法是在注册表上存储连接池。然后,每个请求都可以通过
    request.registry.connection\u pool
    从那里获取一个连接并执行它的操作。与使用全局模块相比,这总是更可取的,因为所有的标准原因都是全局变量不好。

    你看了吗?@StevePiercy是的,但它们不适合我的用例如果你不介意在金字塔的上下文中指出其中的一些,我会很感激的。全局变量在几乎所有类型的编程中都不好,尽管在嵌入式领域中通常是必要的。全局变量是一种副作用(状态变异/在函数签名之外处理),使API更难使用/理解。全局函数的生命周期几乎从来都不是全局的,因此有时不允许调用某些函数,并且依赖文档来明确这一点。