【发布时间】:2022-01-01 18:37:03
【问题描述】:
我正在使用 pd.read_csv 打开一个 .csv 并将其转换为 DataFrame。 DataFrame 需要进行一些更改以进行相应的缩放。缩放需要几分钟,所以应该只缩放一次。
data = pd.DataFrame(pd.read_csv(...))
for index, row in data.iterrow():
data['specific_column'][index] = data['specific_column'][index] * (different scaling factors)
etc.
然后有几个函数可以用这个缩放的 df 做不同的事情,我希望这些函数同时运行以节省一些时间。
def function1(input_data, arg1 ....)
do something
def function2(input_data, arg1 ....)
do something
etc.
if __main__=='__name__':
process1 = multiprocessing.Process(target=function1, args=(data, arg1, ....)
process2 = multiprocessing.Process(target=function1, args=(data, arg1, ....)
etc.
processes = [process1, process2, ....]
process1.start()
process2.start()
.....
for process in processes:
process.join()
我注意到这些进程正在一个接一个地运行(不是并行运行),并且 .csv 在每个进程之后一次又一次地重新打开和缩放,我知道每个进程都是从顶部一直重复代码开始的,但重新调整 DataFrame 需要花费太多时间。我猜唯一的问题是缩放后的 DataFrame 需要在内存中相乘(类似于我猜的产量),并且每个副本都由函数单独使用。 (每个函数都有一个副本)
我相信这应该是一个简单的解决方案,但在多处理领域相对较新,我自己无法找到该解决方案。请帮忙...
【问题讨论】:
-
stackoverflow.com/questions/70052925/… 有类似的讨论,建议的解决方案是使用
split -lcommand 拆分数据文件 -
拆分数据是针对不同问题的解决方案。我的问题是如何将 DataFrame(有时可以小至 1MB)相乘,以便每个函数都复制一份。
-
我不是 100% 确定我已经听懂了你的问题。但是为什么不将
data变量的创建移到if __main__=='__name__':块内,应该是if __name__ == '__main__':
标签: python pandas dataframe multiprocessing