如何从python并行化数据库插入

时间:2017-09-08 09:56:50

标签: python multithreading postgresql parallel-processing multiprocessing

我有一个从访问数据库读取并写入postgresql的脚本。该脚本在将其插入postgresql数据库之前处理来自访问的旧数据(缺少主键和外键等)。 我想并行化(在同一时间插入多个表)独立部分,意思是:

  • group1:插入tableA,tableB
  • group2:插入tableC,tableD,tableE

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)相比,

没有显着的性能提升。我的所有尝试都没有性能提升(有时甚至比顺序脚本慢)。

0 个答案:

没有答案