使用巨大的复杂对象并行化 python3 程序

Parallelizing python3 program with huge complex objects

简介

我有一个相当复杂的 python 程序(比如超过 5.000 行),用 Python 3.6 编写。该程序解析包含 5.000 多个文件的庞大数据集,处理它们创建数据集的内部表示,然后创建统计信息。由于我必须测试模型,我需要保存数据集表示,现在我通过 dill 使用序列化来完成它(在表示中有 pickle 不支持的对象)。整个数据集的序列化(未压缩)大约需要 1GB。

问题

现在,我想通过并行化来加速计算。完美的方法是多线程方法,但 GIL 禁止这样做。 multiprocessing 模块(和 multiprocess - dill 兼容 - 也)使用序列化在进程之间共享复杂对象,因此,在我设法发明的最好情况下,并行化对我没有影响由于数据集的巨大规模,准时性能。

问题

处理这种情况的最佳方法是什么?

我知道 posh,但它似乎只兼容 x86ray 但它也使用序列化,gilectomy([=42 的一个版本=] 没有 gil) 但我无法使其并行化线程和 Jython 没有 GIL 但与 python 3.x.

不兼容

我愿意接受任何替代方案、任何语言,无论它有多复杂,但我无法从头开始重写代码。

我找到的最佳解决方案是将 dill 更改为基于标准 pickle 的自定义酸洗模块。看这里: