烧瓶的Cassandra连接池

时间:2015-02-25 22:46:23

标签: python flask cassandra

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

我需要对Flask做什么,以便我不必在每次请求时都创建与群集的连接?

1 个答案:

答案 0 :(得分:3)

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

如果您使用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