我正在研究使用Flask构建的REST Web服务,该服务需要查询Cassandra数据库。逻辑中最昂贵的部分是创建与Cassandra集群的连接。
我需要对Flask做什么,以便我不必在每次请求时都创建与群集的连接?
答案 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