0

介绍

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

问题

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

问题

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

我知道posh,但它似乎只是x86兼容的,ray但它也使用序列化,gilectomy(没有 gil 的 python 版本)但我无法使其并行化线程并且Jython没有 GIL 但与 python 3 不兼容。 X。

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

4

1 回答 1

0

我找到的最佳解决方案是更改dill为基于标准的自定义酸洗模块pickle。请参见此处:Python 3.6 酸洗自定义程序

于 2018-02-14T16:12:05.983 回答