65 lines
1.8 KiB
ReStructuredText
65 lines
1.8 KiB
ReStructuredText
========================
|
|
Third party integrations
|
|
========================
|
|
|
|
|
|
Celery
|
|
------
|
|
|
|
Here's how, in substance, CQLengine can be plugged to `Celery
|
|
<http://celery.readthedocs.org/>`_:
|
|
|
|
.. code-block:: python
|
|
|
|
from celery import Celery
|
|
from celery.signals import worker_process_init, beat_init
|
|
from cqlengine import connection
|
|
from cqlengine.connection import (
|
|
cluster as cql_cluster, session as cql_session)
|
|
|
|
def cassandra_init():
|
|
""" Initialize a clean Cassandra connection. """
|
|
if cql_cluster is not None:
|
|
cql_cluster.shutdown()
|
|
if cql_session is not None:
|
|
cql_session.shutdown()
|
|
connection.setup()
|
|
|
|
# Initialize worker context for both standard and periodic tasks.
|
|
worker_process_init.connect(cassandra_init)
|
|
beat_init.connect(cassandra_init)
|
|
|
|
app = Celery()
|
|
|
|
|
|
uWSGI
|
|
-----
|
|
|
|
This is the code required for proper connection handling of CQLengine for a
|
|
`uWSGI <https://uwsgi-docs.readthedocs.org>`_-run application:
|
|
|
|
.. code-block:: python
|
|
|
|
from cqlengine import connection
|
|
from cqlengine.connection import (
|
|
cluster as cql_cluster, session as cql_session)
|
|
|
|
try:
|
|
from uwsgidecorators import postfork
|
|
except ImportError:
|
|
# We're not in a uWSGI context, no need to hook Cassandra session
|
|
# initialization to the postfork event.
|
|
pass
|
|
else:
|
|
@postfork
|
|
def cassandra_init():
|
|
""" Initialize a new Cassandra session in the context.
|
|
|
|
Ensures that a new session is returned for every new request.
|
|
"""
|
|
if cql_cluster is not None:
|
|
cql_cluster.shutdown()
|
|
if cql_session is not None:
|
|
cql_session.shutdown()
|
|
connection.setup()
|