gpt4 book ai didi

Python 多处理传递数据库游标对象

转载 作者:行者123 更新时间:2023-11-29 22:15:27 24 4
gpt4 key购买 nike

我有一个使用 getq() 方法填充的队列。该队列中填充的数据需要插入到数据库中。

我正在尝试生成几个进程并将数据插入数据库。由于总数据约为 100MB,因此进行并行处理可以节省内存!

我正在使用 SQL Server,以及 Python 2.7 上的 pymssql 库。

下面是我的代码

def worker(queue, db_queue):
db = get_db()
cursor = db.cursor()
db_queue.put(db)
while True:
data = queue.get()
# perform database operations inside a function
queue.task_done()

def main():
queue = JoinableQueue()
db_queue = Queue()
for _ in range(10):
p = Process(target=worker, args=(queue, db_queue))
p.daemon = True
p.start()
getq(q)
queue.join()

while not db_queue.empty():
db_queue.get().commit()

if __name__ == "__main__":
main()

当我将 db 又名连接对象放入 multiprocessing.Queue 中,并将其返回到主进程中时,连接就会关闭!

我的基本意图是使用多个进程将所有数据插入数据库。只有在所有进程中成功插入后,才提交它们。如果有一个未能提交,则回滚所有内容!

我不确定哪里出了问题。有人可以帮忙吗?

最佳答案

while True:
data = queue.get()
# perform database operations inside a function
queue.task_done()
db.commit() # unreachable

在我看来,您永远不会提交数据库,因为您总是在 while True 循环中旋转。

关于Python 多处理传递数据库游标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31240533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com