使用多处理模块时,无法将pandas dataframe对象发送到SQL

时间:2015-07-13 16:46:50

标签: python pandas multiprocessing python-multiprocessing

我正在使用多个cpu内核转换单个数据帧,并希望将结果插入MySQL。

使用下面的代码,我只观察到一个活动的cpu核心,没有MySQL的更新。没有生成错误消息。

原始数据框pandas_df永远不会改变。 pandas_df的所有转换都存储在result_df中。

代码已经过验证,可以串行正常使用。

import multiprocessing as mp
from sqlalchemy import create_engine
engine = create_engine(MYSQL_STRING)

def function(pandas_df, tuple, engine):
    #slice and dice pandas_df according to tuple
    result_df.to_sql("TABLE_NAME", engine, if_exists='append')


pool = mp.Pool(processes=4)
for tuple in tuples:
    pool.apply_async(est, args=(pandas_df, tuple, engine))

我遇到的大多数教程和指南只在args=()内传递了字符串。 然而,有些文章确实证明了传递numpy数组的能力:http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html

我还使用map_async()方法和/或在return内插入function语句尝试了上述代码,但行为没有差异。

我愿意尝试不同的python模块。我需要一个解决方案,它可以并行转换单个数据帧并将结果插入到数据库中。

1 个答案:

答案 0 :(得分:1)

您需要确保该函数可以访问所有变量,否则可能会发生静默失败。