cassandra在uwsgi服务器上升了操作时间

时间:2015-06-15 13:32:48

标签: python cassandra uwsgi gunicorn

我有一个用python编写的Web服务器,它使用Cassandra的python驱动程序与cassandra数据库进行交互。 当我使用gunicorn http服务器启动这个python服务器时,我的请求处理没有错误。 但是当我在第一次请求后使用uwsgi http服务器运行相同的服务器时,必须将一些数据写入Cassandra表,cassandra会引发错误

  

cassandra.OperationTimedOut:errors = {},last_host = 127.0.0.1

错误在python中的session.prepare()函数调用中引发。

1 个答案:

答案 0 :(得分:2)

我们的应用程序中收到了相同的错误消息。

我们通过在构造函数中打开Cassandra会话来修复它,并在Model Class的destroy函数中关闭它。请参阅下面的代码

class Model():
      def __init__(self):
          self.db = cassandra.createSession()

      def __del__(self):
          self.db.shutdown()

<强>编辑: 我在这里找到了一个更好的解决方案:uWSGI Cassandra

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()