Python Django中的Cassandra连接池
对Django应用程序(由Apache托管)的大多数请求都需要连接到Cassandra密钥空间并获取/处理数据。目前,我为每个请求打开一个新的连接,即使是最简单的请求也会增加2.5秒的开销 解决方案是使用连接池,但我不太清楚如何在Django中实现这一点?以下是我到目前为止的发现:Python Django中的Cassandra连接池,python,django,cassandra,connection-pooling,Python,Django,Cassandra,Connection Pooling,对Django应用程序(由Apache托管)的大多数请求都需要连接到Cassandra密钥空间并获取/处理数据。目前,我为每个请求打开一个新的连接,即使是最简单的请求也会增加2.5秒的开销 解决方案是使用连接池,但我不太清楚如何在Django中实现这一点?以下是我到目前为止的发现: 我可以使用像或这样的对象映射器,它们在多个请求之间保持连接。我不需要对象映射器,所以我宁愿跳过不需要的库。当然,我已经在使用Datastax Python驱动程序,这意味着我可以使用CQL引擎,但它如何帮助我还不是很
mod_wsgi
,但我在gunicorn
上发现了更多结果(我不介意切换)。对于gunicorn
有一个回调,post\u fork
,我可以使用它(如中所示)。在那里我可以连接,但我不知道如何与应用程序共享连接!这里有0个例子wsgi.py
中连接到我的数据库,我可以与我的应用程序共享它(它也可以与mod_wsgi
一起工作)。我所要做的就是这样:导入操作系统
导入系统
sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(_文件__),“../”))
sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(_文件__),“./”))
os.Enviro.setdefault(“DJANGO\u设置\u模块”、“myapp.SETTINGS”)
从django.core.wsgi导入获取\u wsgi\u应用程序
application=get\u wsgi\u application()
从myapp导入密钥空间管理器
从django.conf导入设置
集群,会话=keyspace_manager.initCassandraConnection()
settings.CLUSTER=CLUSTER
settings.SESSION=会话
然后我可以访问请求中的集群/会话对象,而无需每次初始化它
现在我的问题是:这种方法(#3,wsgi.py中的init连接)正确吗?这可能会出什么问题?
如果没有,我如何在Django中实现Cassandra连接池
非常感谢,当使用mod_wsgi时,多线程进程和多个请求在进程中同时发生更为典型。如果该会话一次只能由一个请求使用,则会出现问题。使用mod_wsgi时,多线程进程和多个请求在进程中同时发生更为典型。如果该会话一次只能由一个请求使用,您将遇到问题。