使用cx_Oracle插入数据和多进程

时间:2018-10-21 07:47:11

标签: python multiprocessing 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.executemany,table_A会被锁定吗?

1 个答案:

答案 0 :(得分:0)

如果您创建一个会话池并创建多个线程,并且在每个线程中您都从该池获取一个连接,该连接会在表中插入一些对您有用的行。您可能希望分批进行,以调整在Python中花费的时间(由于GIL而成为单线程)和等待数据库完成插入所花费的时间。

相关问题