我有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.executemany
,table_A会被锁定吗?
答案 0 :(得分:0)
如果您创建一个会话池并创建多个线程,并且在每个线程中您都从该池获取一个连接,该连接会在表中插入一些对您有用的行。您可能希望分批进行,以调整在Python中花费的时间(由于GIL而成为单线程)和等待数据库完成插入所花费的时间。