Python 在psycopg2中的游标内线程

Python 在psycopg2中的游标内线程,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我在python中编写了一个脚本,它使用psycopg连接到数据库。 我正在处理同一数据库中的两个表。首先,我运行一个select*from table_1,然后检查每一行(fetchone)是否满足某些要求。如果有,则在表2中创建一个新行,并插入INSERT。代码与此类似: cursor_1 = conn.cursor() cursor_2 = conn.cursor() cursor_1.execute("SELECT * FROM table_1") for i in range(1,n

我在
python
中编写了一个脚本,它使用
psycopg
连接到数据库。 我正在处理同一数据库中的两个表。首先,我运行一个
select*from table_1
,然后检查每一行(
fetchone
)是否满足某些要求。如果有,则在表2中创建一个新行,并插入
INSERT
。代码与此类似:

cursor_1 = conn.cursor()
cursor_2 = conn.cursor()

cursor_1.execute("SELECT * FROM table_1")
for i in range(1,n):
    a = cursor_1.fetchone()
    if (condition_in_a):
        cursor_2.execute("INSERT into table_2 (f1,f2) values (v1,v2)")
脚本在一个连续的
for
循环中运行,我想知道在性能方面是否有更好的方法通过
psycopg2.pool
完成此任务。所以我的问题是:是否可以对
psycopg
游标执行多线程?如果没有,实现更好性能的最佳方法是什么


提前感谢。

在单线程方法中,您试图在内存使用和行处理速度之间保持平衡
fetchone
减少内存使用,但需要更多的工作来获取数据
fetchall
对于大型数据集,使用大量内存,数据加载可能需要一段时间才能开始处理

因此,至少更好的方法是使用
fetchmany
按较小的部分提取数据。以下生成器可简化过程:

def ResultIter(cursor, limit=100):
    while True:
        results = cursor.fetchmany(limit)
        if not results:
            break
        for result in results:
            yield result
基于这种方法,您也可以实现多线程处理,但我真的不确定性能