通过 Python 多处理队列执行 cassandra 插入查询

Executing a cassandra insert query through Python multiprocessing queue

我有一个 cassandra 键空间 sujata。我正在使用 python 驱动程序 cassandra.cluster 连接到 cassandra。sujata 的列族是 hello。 以下是我的代码:-

from multiprocessing import Process,Queue
from cassandra.cluster import Cluster
import os
queue=Queue()
cluster = Cluster(['127.0.0.1'])
metadata = cluster.metadata
session = cluster.connect("sujata")

def hi():
    global session
    global queue
    while True:
        y=queue.get()
        if y=="exit":
            os._exit(0)    
        else:
            print y
            session.execute(y)

if __name__=="__main__":
    x=Process(target=hi)
    x.start()
    for i in xrange(10):
        z="INSERT into hello(name) VALUES('" + str(i) + "');"
        queue.put(z)
        if i==9:
            queue.put("exit")
    session.cluster.shutdown()
    session.shutdown()

在 table 中,我有一列 name,我想向其中插入值 i.The 插入查询通过 queue.I 传递,我能够得到queue.when I 运行 上面代码的内容,输出是:-

INSERT into hello(name) VALUES('0');

session.execute() 不工作。 我无法理解为什么会这样。

我没有 cassandra 机器,但我想,一旦您将连接部分移动到 prcoess-function hi(),它就会工作。喜欢:

def hi():
    cluster = Cluster(['127.0.0.1'])
    metadata = cluster.metadata
    session = cluster.connect("sujata")
    global queue
    while True:
        y=queue.get()
        if y=="exit":
            os._exit(0)    
        else:
            print y
            session.execute(y)

不知道为什么会这样,但我看到 global 变量在新进程中表现异常。

我想这不是最好的方法。因为每次它都会连接到同一个数据库,这个数据库是多余的,需要关闭。我希望有更好的答案。

编辑 1:

我没有正确阅读代码。您正在使用 queue。因此进程 hi 只会启动一次,并且 queue 用于进程之间的通信。因此与数据库的连接也将只有一次。您不需要主进程中的数据库连接。所以将那部分转移到多进程函数是最好的方法。