【问题标题】:multiprocessing.pool code stuck and does not finish runningmultiprocessing.pool 代码卡住并且没有完成运行
【发布时间】:2019-06-28 20:01:27
【问题描述】:

我正在尝试在 python 的多处理模块中使用池类来并行处理 Pandas 数据帧的一些数据(在下面的“主代码”标题下提到的代码)。问题是我的代码被卡住并且没有完成运行,无论我提供给它的输入数据帧多么小(甚至小到 10 行)。我还尝试运行一个简单的示例代码(在下面的“池示例”标题下提到的代码),甚至没有运行。

以下是我在下面的代码中尝试执行的操作的详细说明: 我有一个索引数据框,它有 10 列和 650K 行。这个想法是在索引数据帧的每一行中获取 10 个值,对于具有来自目标数据帧“traindat”的这些索引的行,取其中几个列的平均值。我必须对所有索引数据帧行(650K)执行此操作。

主要代码:

from multiprocessing import Pool
def func(x,i):
    dftmp=traindat.iloc[x,4:28].mean()
    return pd.DataFrame(dftmp).transpose()

pool = mp.Pool(processes=3)
new_rows = pool.map(func, [(row,idx) for idx,row in indices.iterrows()])
pool.close()
pool.join()
data_all_new = pd.concat(new_rows)

由于此代码无法运行,我还尝试了以下简单代码来查看池是否为我运行。但事实并非如此。 池示例:

import sys
sys.modules['__main__'].__file__ = 'ipython'
from multiprocessing import Pool
def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [1, 2, 3]))

我的代码没有任何错误。它只是卡住并且没有完成运行。如果你理解这个问题,请帮助我。

编辑:我后来意识到这个问题只发生在 Windows 中。所以编辑问题以包含它。

【问题讨论】:

  • 为什么要更改模块文件?这会破坏酸洗,DataFrame.iterrows真的很慢,如果可以的话,避免它!
  • 查看stackoverflow.com/a/54219990/1358308,我在处理 10k 行时使用其他东西从 iterrows 的 ~1 秒到 ~2ms
  • 谢谢山姆!我根据我对这篇文章的解释编辑了模块:[stackoverflow.com/questions/34086112/…。即使我不修改池文件,“主代码”和“示例代码”都不会运行。我当然会尝试您提到的有关 iterrows 的内容,但我需要解决更基本的问题,因为即使“示例代码”也没有完成运行。我认为这个问题也可能与我系统上的多处理模块安装有关。
  • 可能值得使用 jupyter notebook 以外的东西,因为该答案指出它会以微妙的方式破坏事物。如果你是,我建议编辑问题并将jupyter-notebook 添加为标签。另外,我希望你做的比func 做得更多,你可以在 numpy 中非常有效地做这种事情,np.mean(x[:,4:28], axis=1)[:,None] 其中x 是一个 1M x 30 元素矩阵,对我来说大约需要 25ms。
  • 基本上我必须一次计算 10 行数据帧 (traindat) 的 24 列的平均值。我从我在上面称为“索引”的数据帧的每一行(它有 10 列)中获取这些“10 行 traindat”的索引。我必须对所有 650K 行“索引”数据框重复此操作。

标签: python windows pandas multiprocessing


【解决方案1】:

在同事的帮助下,我意识到这是一个重复的问题。发布原始问题和答案的链接,以防有人偶然发现: Basic parallel python program freezes on Windows

似乎这是与 IDE 配置不正确有关的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多