0

我有一个计算量很大的项目,似乎是并行化的一个很好的候选者。该代码使用大量 GIS 等值线,单个进程占用大约 1.5 GB 内存。可以并行化的逻辑有两个级别:一个将项目区域分成更小(但仍然相当大)的区域的外部级别,以及一个以非常短的段执行大量数学运算的内部循环。

由于 pickle,尝试在外循环上使用 concurrent.futures 失败。Pathos 运行并创建了多个进程,但使用了大量内存并且实际上速度较慢。我假设减速是由于 dill 序列化和重新创建非常大的对象。

我还没有尝试并行化内部循环,但应该能够将代码和轮廓分解成相对较小的对象(~10 KB),不包括外部模块(匀称)。虽然 python 有大量的并行处理选项,但我还没有找到关于处理对象和管理内存的最佳方式的很好的讨论。有什么好的包/方法可以有效地将一个小对象从一个更大的进程中拆分成一个新的进程?

我认为最好使用两个级别的并行化,尽管我不确定并且需要做一些分析。外部循环可以稍微提高内存效率,但将其拆分为多个进程可能不现实。内部循环应该很容易分解成小的、内存效率高的部分,我只是不确定要使用的最佳包。

编辑:绝大多数处理都在 shapley 包中,它是 C 语言中 GEOS 的 python 前端(我认为)。我目前正在使用 python 2.7,但如果它是有益的,我愿意切换到 3。

4

0 回答 0