Flask 的 Cassandra 连接池

Cassandra Connection Pool for Flask

我正在开发使用 Flask 构建的 REST Web 服务,它需要查询 Cassandra 数据库。逻辑中最昂贵的部分是创建与 Cassandra 集群的连接。

我需要用 Flask 做什么,这样我就不必在每次请求时都创建到集群的连接?

您不应该为每个请求都创建新连接,而应该为每个进程创建一个连接对象。

如果你运行你的 flask 应用程序带有 uwsgi ,我建议使用 @postfork 装饰器。 说 - 你正在用 uwsgi 生成 4 个进程,然后 在生成进程后为每个进程创建一个会话。

from uwsgidecorators import postfork
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
from cassandra.query import dict_factory
from cassandra.policies import RoundRobinPolicy

session = None
hosts=["127.0.0.1","127.0.0.2"]
keyspace="mykeyspace"

def get_new_session():
    global cluster
    cluster = Cluster(hosts, protocol_version=4, auth_provider=auth_provider, control_connection_timeout=None,
                  max_schema_agreement_wait=10, port=9042, load_balancing_policy=RoundRobinPolicy())
    s = cluster.connect(keyspace)
    s.row_factory = dict_factory
    return s

#initializing session in every process spawned by uwsgi
@postfork
def connect():
     global session
     session = get_new_session() 
     session.row_factory = dict_factory