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

时间:2018-02-11 14:43:53

标签: multithreading python-3.x parallel-processing gil dill

简介

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

问题

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

问题

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

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

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

1 个答案:

答案 0 :(得分:0)

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