gpt4 book ai didi

python - 有效整合concurrent.futures并行执行的结果?

转载 作者:行者123 更新时间:2023-12-01 08:51:46 26 4
gpt4 key购买 nike

我有一个大约 100M 行的 pandas 数据框。并行处理在多核机器上运行得很好,每个核的利用率都为 100%。但是,executor.map() 的结果是一个生成器,因此为了实际收集处理后的结果,我迭代该生成器。这是非常非常慢(几个小时),部分原因是它是单核,部分原因是循环。事实上,它比 my_function()

中的实际处理慢得多

有更好的方法(也许是并发和/或矢量化)吗?

编辑:将 pandas 0.23.4(目前最新)与 Python 3.7.0 结合使用

import concurrent
import pandas as pd

df = pd.DataFrame({'col1': [], 'col2': [], 'col3': []})

with concurrent.futures.ProcessPoolExecutor() as executor:
gen = executor.map(my_function, list_of_values, chunksize=1000)

# the following is single-threaded and also very slow
for x in gen:
df = pd.concat([df, x]) # anything better than doing this?
return df

最佳答案

这是与您的案例相关的基准:https://stackoverflow.com/a/31713471/5588279

如您所见,多次 concat(append) 效率非常低。你应该只执行pd.concat(gen)。我相信底层实现将预先分配所有需要的内存。

就您而言,每次都会完成内存分配。

关于python - 有效整合concurrent.futures并行执行的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com