gpt4 book ai didi

python - 在 psycopg2 中的游标内线程化

转载 作者:行者123 更新时间:2023-11-29 12:17:03 25 4
gpt4 key购买 nike

我用 python 编写了一个脚本,它使用 psycopg 连接到数据库。我正在处理同一个数据库中的两个表。首先,我运行 select * from table_1,然后检查每一行 (fetchone) 是否满足某些要求。如果他们这样做,将在 table_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

基于这种方法你也可以实现多线程处理,但我真的不确定性能。

关于python - 在 psycopg2 中的游标内线程化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802139/

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