Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 多线程将csvreader行插入psycopg2连接的postgres_Python_Postgresql_Psycopg2_Python Multithreading - Fatal编程技术网

Python 多线程将csvreader行插入psycopg2连接的postgres

Python 多线程将csvreader行插入psycopg2连接的postgres,python,postgresql,psycopg2,python-multithreading,Python,Postgresql,Psycopg2,Python Multithreading,我有一个管道,将gzip的csv数据读入python,并将数据逐行插入postgres数据库,使用psycopg2连接。我已经创建了一个线程连接池,但我不确定如何利用它在单独的线程中插入每一行,而不是按顺序插入。如果这是可能的话,互联网给了我复杂的信息,我对线程化python模块有一些经验,但不是很多 管道目前是成功的,但速度很慢,我希望通过在线程之间插入行而不是按顺序插入行可以加快速度 为清晰起见,简化了以下代码: main script for row in reader: ins

我有一个管道,将gzip的csv数据读入python,并将数据逐行插入postgres数据库,使用psycopg2连接。我已经创建了一个线程连接池,但我不确定如何利用它在单独的线程中插入每一行,而不是按顺序插入。如果这是可能的话,互联网给了我复杂的信息,我对线程化python模块有一些经验,但不是很多

管道目前是成功的,但速度很慢,我希望通过在线程之间插入行而不是按顺序插入行可以加快速度

为清晰起见,简化了以下代码:

main script

for row in reader:
    insertrows(configs, row) 

我想做的是,而不是在各行之间循环,创建类似于中的线程示例的内容,但如果没有多线程的强大参考框架,我很难想出如何编写类似的内容来实现我的目的。

您是否尝试过批量插入数据而不是使用线程?我不想批量插入,因为我希望管道对大数据集具有健壮性,但是谢谢你的建议。还没有机会尝试这个,但我将尝试保持连接打开,而不是为每个插入重新连接。如果我可以作为一个线程连接池做得更好,但我仍然想知道如何利用这种可能性……接下来,不扩容也是非常低效的,所以现在除了保持打开连接之外,我还批量处理100000行,这两种方法都使管道更快。但我仍然想弄清楚如何真正利用多线程插入。。。
insertrows script

threadpool = pool.ThreadedConnectionPool(5, 20, database=dbname, port=port, user=user, password=password, host=host)
con = threadpool.getconn()
con.autocommit = True
cur = con.cursor()
cur.execute("INSERT INTO table VALUES row")
cur.close()
threadpool.putconn(con)