python - 使用多处理模块时无法将 Pandas 数据框对象发送到 SQL

标签 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() 方法和/或在 function 中插入一个 return 语句来编写上面的代码,并且有行为没有差异。

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

最佳答案

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

关于python - 使用多处理模块时无法将 Pandas 数据框对象发送到 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388987/

相关文章:

python - 在 Pandas 数据框上绘制堆叠条形图

Python 2.7 多处理障碍

python - 字符串的 2to3 转换

python - 为什么下面的模式程序没有给出所需的输出?

python - 如何删除一列中括号内的数据?

python - 如何将值列表写入 csv 文件中的 "cell"?

Python MyQLdb execute 不接受参数

python - 一些超链接无法使用 Openpyxl 打开

python - 为什么我没有看到通过 Python 中的多处理加速?

Python dict.get() 锁