为什么python Cassandra驱动程序在声明为类字段时失败?

为什么python Cassandra驱动程序在声明为类字段时失败?,python,cassandra,Python,Cassandra,我目前正在使用一个服务器进程,该进程旨在连接到Cassandra数据库并将信息转发给它。这个过程是作为一个类编写的,我的目标是为这个类创建一个Cassandra会话,它可以用来发送信息。然而,我遇到了一个问题;当我在classesinit方法中创建Cassandra会话,然后尝试在另一个方法中使用该会话时,我得到以下错误: errors={},last\u host=。目前,我可以通过每次调用该方法时创建一个新的Cassandra会话来解决这个问题,但这显然不是一个好方法。那么,我怎样才能在课堂

我目前正在使用一个服务器进程,该进程旨在连接到Cassandra数据库并将信息转发给它。这个过程是作为一个类编写的,我的目标是为这个类创建一个Cassandra会话,它可以用来发送信息。然而,我遇到了一个问题;当我在classesinit方法中创建Cassandra会话,然后尝试在另一个方法中使用该会话时,我得到以下错误:
errors={},last\u host=
。目前,我可以通过每次调用该方法时创建一个新的Cassandra会话来解决这个问题,但这显然不是一个好方法。那么,我怎样才能在课堂上始终如一地使用卡桑德拉课程呢

此代码不起作用:

from cassandra.cluster import Cluster
from multiprocessing import Process
class DataProcess(Process):

    def __init__(self):

        super(DataProcess,self).__init__()

        # Do a few other irrelevant things ...

        # Set up the Cassandra connection
        self.cluster = Cluster(contact_points=[CASSANDRA_IP])
        self.session = self.cluster.connect('some keyspace')
        print "Connected to cassandra."

    def callback(self,ch,method,props,body):
        prepared_statement = self.session.prepare("Some CQL statement...")
        bound_statement = prepared_statement.bind(some values)
        self.session.execute(bound_statement)

Output:
"Connected to cassandra."
errors={}, last_host=<server IP address>
其他相关信息:

使用python cassandra驱动程序版本2.5.1

Cassandra数据库版本2.1.8

编辑:答案 以下代码解决了该问题:

from cassandra.cluster import Cluster
from multiprocessing import Process
class DataProcess(Process):

    def __init__(self):

        super(DataProcess,self).__init__()
        self.cluster = None
        self.session = None
        # Do a few irrelevant things ...


    def callback(self,ch,method,props,body):
        # Set up the Cassandra connection
        cluster = Cluster(contact_points=[CASSANDRA_IP])
        session = cluster.connect('some keyspace')
        prepared_statement = session.prepare("Some CQL statement...")
        bound_statement = prepared_statement.bind(some values)
        session.execute(bound_statement)

    def run(self):
        self.cluster = Cluster(contact_points=[CASSANDRA_IP])
        self.session = self.cluster.connect('some keyspace')

您是否在fork之前创建集群和会话?这可能会导致像你所看到的那样的问题。这里有一篇关于如何使用python驱动程序使用池分发工作的精彩文章。这可能正是你所要寻找的


如果不是,请留下更多关于您如何运行流程的上下文,因为在不了解流程生命周期的情况下很难复制。

啊,就是这样。我刚刚将代码移到进程的run()方法。接得好,谢谢!
from cassandra.cluster import Cluster
from multiprocessing import Process
class DataProcess(Process):

    def __init__(self):

        super(DataProcess,self).__init__()
        self.cluster = None
        self.session = None
        # Do a few irrelevant things ...


    def callback(self,ch,method,props,body):
        # Set up the Cassandra connection
        cluster = Cluster(contact_points=[CASSANDRA_IP])
        session = cluster.connect('some keyspace')
        prepared_statement = session.prepare("Some CQL statement...")
        bound_statement = prepared_statement.bind(some values)
        session.execute(bound_statement)

    def run(self):
        self.cluster = Cluster(contact_points=[CASSANDRA_IP])
        self.session = self.cluster.connect('some keyspace')