通过 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
用于进程之间的通信。因此与数据库的连接也将只有一次。您不需要主进程中的数据库连接。所以将那部分转移到多进程函数是最好的方法。
我有一个 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
用于进程之间的通信。因此与数据库的连接也将只有一次。您不需要主进程中的数据库连接。所以将那部分转移到多进程函数是最好的方法。