首页 > 解决方案 > 为什么我的多处理函数 map_async 卡住了?

问题描述

当使用拆分的 DataFrame 作为输入调用 map_async 方法时,我的多线程操作挂起。什么会导致这个问题?

我试图查看拆分的 DataFrame 大小是否均匀是否重要。我还测试了 Pool.map 和 Pool.map_sync。我的 CPU 大约是四核的 80%。此外,我研究了关于这个主题的不同问题线索。问题之一是为其中一个映射函数提供一个空的可迭代对象作为参数。

import multiprocessing
import numpy as np
import pandas as pd

def test(df):
    print(df['ELEM'].iloc[0])

filename = "ABC.xlsx"     

df = pd.read_excel(filename, index_col=None, header=0) # (135, 28) DataFrame

p = multiprocessing.cpu_count()-1 # = 3 

splitted = np.array_split(df, p) # 3 * (45, 28) DataFrames

pool = multiprocessing.Pool(processes=p)

processs = [(splitted_df_pi) for splitted_df_pi in splitted] # 3 * (45, 28) DataFrames

result = pool.map_async(test, processs)
pool.close()
pool.join()

我希望这个过程不会永远持续下去。然而,似乎是。我不完全确定在哪里寻找,或者如何找到这个问题的根源。我希望有人能对此有所了解,在此先感谢。

标签: pythonmultithreadingparallel-processingmultiprocessingthreadpool

解决方案


推荐阅读