首页 > 解决方案 > 使用 cx_Oracle 插入数据和多进程

问题描述

我有 1000 万条数据需要做一些数据整理,然后这个数据框将被插入到 Oracle 中。它太大了,我尝试将它们拆分10次,这样我一次可以处理100万个。这是我的代码:

for i in range(10):
    rows = cursor.fetchmany(1000000)     
    # change rows into dataframe
    df_nps = pd.DataFrame(rows, columns=[x[0] for x in cursor.description])
    # data_preprocessing
    df_nps = data_preprocessing(df_nps)
    # insert the clean data into Oracle
    cursor2 = conn.cursor()
    cursor2.executemany('''insert into table_A(sdate,first_name) values(:1,:2)''', df_nps)
    conn.commit()

现在,我想使用 Python 多处理,这样也许它可以在一段时间内更快地工作。但是,我很好奇如果我在上面的循环中使用多处理,那么cursor2.executemanytable_A 会被锁定吗?

标签: pythonmultiprocessingcx-oracle

解决方案


如果您创建一个会话池并创建多个线程,并且在每个线程中,您从池中获取一个连接,该连接将许多行插入应该为您工作的表中。您可能希望以较小的批次执行此操作,以调整在 Python 中花费的时间(由于 GIL,这将是单线程的)以及等待数据库完成插入所花费的时间。


推荐阅读