使用cx_Oracle插入数据和多进程



我有1000万数据需要做一些数据整理 之后,此数据帧将入到甲骨文中。 它太大了,我尝试将它们拆分 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.executemany,table_A会被锁定吗?

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

相关内容

  • 没有找到相关文章