我有一个从访问数据库读取并写入postgresql的脚本。该脚本在将其插入postgresql数据库之前处理来自访问的旧数据(缺少主键和外键等)。 我想并行化(在同一时间插入多个表)独立部分,意思是:
TableC是TableB的依赖(外键),它依赖于tableA,但group2独立于group1。
即使可能,使用python实现此目的的最佳方法是什么?
我尝试过线程,多处理和concurrent.futures,但似乎无法掌握并行化的复杂性。我的最新尝试:
with ProcessPoolExecutor(max_workers=2) as e:
g1 = e.submit(group1)
g2 = e.submit(group2)
等待第一批开始另一批,这取决于第一批:
with ProcessPoolExecutor(max_workers=2) as e:
g3 = e.submit(group3)
g4 = e.submit(group4)
组被定义为:
def group1():
print('g1')
acc_con = psycopg2.connect(host='xxx', database='old_access')
pg_con = psycopg2.connect(host='xxx', database='new_postgre')
tableA = transfer_tableA(acc_con.cursor(), lvs_con.cursor())
tableB = transfer_tableB(acc_con.cursor(), lvs_con.cursor())
pg_con.commit()
pg_con.close()
acc_con.close()
return 'tableA and tableB done'
与我的顺序脚本(一个接一个地启动传输脚本:tA,tB,tC,tD,tE)相比,没有显着的性能提升。我的所有尝试都没有性能提升(有时甚至比顺序脚本慢)。