【发布时间】:2021-07-15 17:16:31
【问题描述】:
我有一个函数,它将数据帧作为输入并返回一个数据帧。喜欢:
def process(df):
<all the code for processing>
return df
# input df has 250K rows and 30 columns
# saving it in a variable
result = process(df)
# transform input df into 10,000K rows and over 50 columns
它做了很多处理,因此需要很长时间才能返回输出。我正在使用 jupyter 笔记本。
我想出了一个新函数,它根据原始 df 列上的某个类别过滤器将原始数据帧过滤成 5 个大小不相等但介于 30K 到 100K 之间的块,并将其作为 process(df1 )、进程(df2)...等。并将其保存为结果 1、结果 2 等,然后将结果合并为一个最终数据帧。
但我希望它们同时运行并自动组合结果。就像一个代码一起运行 5 个流程功能,一旦全部完成,它们就可以合并为一个,为我提供与之前相同的“结果”,但节省了大量运行时间。
如果我可以将原始数据帧分成相等的部分并使用 process(df) 函数同时运行每个部分,那就更好了,就像它将这 250 k 行随机拆分为 5 个大小为 50k 的数据帧并将它们作为输入发送到进程(df)五次并并行运行它们,并给我相同的最终输出,我现在会得到没有任何这种优化。
我阅读了很多关于多线程的内容,并在堆栈溢出方面找到了一些有用的答案,但我无法真正让它发挥作用。我对多线程这个概念很陌生。
【问题讨论】:
标签: python multithreading dataframe function optimization