2015-02-25 2 views
0

Я работаю над веб-службой REST, созданной с помощью Flask, которая должна запрашивать базу данных Cassandra. Самая дорогая часть логики - это создание соединения с кластером Cassandra.Cassandra Connection Pool for Flask

Что мне нужно делать с флягой, чтобы мне не нужно было создавать соединение с кластером по каждому запросу?

+1

Попробуйте это: https://datastax.github.io/python-driver/api/cassandra/pool.html Колба не меняется слишком много в уравнении :) – Wolph

+0

Спасибо. Есть ли учебник или пример, показывающий, как правильно использовать эту функцию? Я искал вокруг и не смог найти ничего, кроме страницы, с которой вы связались. – egerhard

+0

Если вы разделяете объект 'session = cluster.connect()', вы должны быть хорошими. Он автоматически будет пулен для вас. – Wolph

ответ

2

Вам не следует создавать новое соединение для каждого запроса, вместо этого вы должны создать объект соединения для каждого процесса.

Если вы используете флеш-приложение с uwsgi, я предлагаю использовать декоратор @postfork. Скажите: вы создаете 4 процесса с помощью uwsgi, затем после каждого процесса создается один сеанс для каждого процесса.

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