Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用多线程写入db2时出错_Python_Multithreading_Db2 - Fatal编程技术网

在python中使用多线程写入db2时出错

在python中使用多线程写入db2时出错,python,multithreading,db2,Python,Multithreading,Db2,我正在使用ibm_db python库将数据插入db2。 只要一根线,一切都很好。当我开始使用多线程来加速对db2的写入时,我开始出现一个错误: 异常:[IBM][CLI驱动程序]SQL0902C发生系统错误。 无法处理后续SQL语句。IBM软件支持 原因代码:“”。SQLSTATE=58005 SQLCODE=-902 我的单线程代码是这样的: def process_user(user): .... sqlstr = "insert into ..." ibm_db.exe

我正在使用ibm_db python库将数据插入db2。 只要一根线,一切都很好。当我开始使用多线程来加速对db2的写入时,我开始出现一个错误:

异常:[IBM][CLI驱动程序]SQL0902C发生系统错误。 无法处理后续SQL语句。IBM软件支持 原因代码:“”。SQLSTATE=58005 SQLCODE=-902

我的单线程代码是这样的:

def process_user(user):
   ....
   sqlstr = "insert into ..."
   ibm_db.exec_immediate(db2conn, sqlstr)
   return 1 

for user in users:
   n += process_user(user)
我使用多线程的代码是:

from multiprocessing import Pool
def process_user(user):
   ....
   sqlstr = "insert into ..."
   ibm_db.exec_immediate(db2conn, sqlstr)
   return 1 


pool = Pool(20)
nusers = len(pool.map(process_user, users))

我的问题是,使用多个线程将数据插入db2的正确方法是什么?

看起来您可能正在为所有线程共享一个
db2conn
。您是否尝试为每个线程提供自己的连接?为每个线程创建pconnection并检查数据库是否没有任何限制(连接数)@user212514是的,我为所有线程共享一个db2conn。我原以为它可以支持多线程,但从你的评论来看它不支持。谢谢,将尝试为每个线程提供自己的连接。@ValeriySolovyov谢谢,将这样做。似乎单个连接不支持多线程。可能您正在为所有线程共享一个
db2conn
。您是否尝试为每个线程提供自己的连接?为每个线程创建pconnection并检查数据库是否没有任何限制(连接数)@user212514是的,我为所有线程共享一个db2conn。我原以为它可以支持多线程,但从你的评论来看它不支持。谢谢,将尝试为每个线程提供自己的连接。@ValeriySolovyov谢谢,将这样做。似乎单个连接不支持多线程。