使用巨大的复杂对象并行化 python3 程序
Parallelizing python3 program with huge complex objects
简介
我有一个相当复杂的 python 程序(比如超过 5.000 行),用 Python 3.6 编写。该程序解析包含 5.000 多个文件的庞大数据集,处理它们创建数据集的内部表示,然后创建统计信息。由于我必须测试模型,我需要保存数据集表示,现在我通过 dill
使用序列化来完成它(在表示中有 pickle
不支持的对象)。整个数据集的序列化(未压缩)大约需要 1GB。
问题
现在,我想通过并行化来加速计算。完美的方法是多线程方法,但 GIL 禁止这样做。 multiprocessing
模块(和 multiprocess
- dill
兼容 - 也)使用序列化在进程之间共享复杂对象,因此,在我设法发明的最好情况下,并行化对我没有影响由于数据集的巨大规模,准时性能。
问题
处理这种情况的最佳方法是什么?
我知道 posh
,但它似乎只兼容 x86
,ray
但它也使用序列化,gilectomy
([=42 的一个版本=] 没有 gil) 但我无法使其并行化线程和 Jython
没有 GIL 但与 python 3.x.
不兼容
我愿意接受任何替代方案、任何语言,无论它有多复杂,但我无法从头开始重写代码。
我找到的最佳解决方案是将 dill
更改为基于标准 pickle
的自定义酸洗模块。看这里:
简介
我有一个相当复杂的 python 程序(比如超过 5.000 行),用 Python 3.6 编写。该程序解析包含 5.000 多个文件的庞大数据集,处理它们创建数据集的内部表示,然后创建统计信息。由于我必须测试模型,我需要保存数据集表示,现在我通过 dill
使用序列化来完成它(在表示中有 pickle
不支持的对象)。整个数据集的序列化(未压缩)大约需要 1GB。
问题
现在,我想通过并行化来加速计算。完美的方法是多线程方法,但 GIL 禁止这样做。 multiprocessing
模块(和 multiprocess
- dill
兼容 - 也)使用序列化在进程之间共享复杂对象,因此,在我设法发明的最好情况下,并行化对我没有影响由于数据集的巨大规模,准时性能。
问题
处理这种情况的最佳方法是什么?
我知道 posh
,但它似乎只兼容 x86
,ray
但它也使用序列化,gilectomy
([=42 的一个版本=] 没有 gil) 但我无法使其并行化线程和 Jython
没有 GIL 但与 python 3.x.
我愿意接受任何替代方案、任何语言,无论它有多复杂,但我无法从头开始重写代码。
我找到的最佳解决方案是将 dill
更改为基于标准 pickle
的自定义酸洗模块。看这里: