python - 为什么我的多处理函数 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()
我希望这个过程不会永远持续下去。然而,似乎是。我不完全确定在哪里寻找,或者如何找到这个问题的根源。我希望有人能对此有所了解,在此先感谢。
解决方案
推荐阅读
- c# - 在ac#程序中,有没有办法打开file.txt,而不使用整个文件路径
- c - 如何计算c中每个字符串的单词和句子数?
- algorithm - 基于法线和中心位置修复网格中翻转面的算法
- laravel - 使用预编译文件在 Docker 容器之间共享文件夹
- python - 向 Jupyter 笔记本函数文档字符串添加输入
- c++ - 为什么 GCC 使用 std::vsnprintf 实现 std::to_string?
- mysql - MySQL 在运行时更新表的空值
- jestjs - 带有 jest.config.js 的 Jest cli testPathIgnorePatterns 导致未找到测试
- c# - 在一个线程上串行运行任务
- sqlite - 检索 sqlite 表中的出现次数