python - 无需 pickle 即可并行化

标签 python parallel-processing dask dask-distributed

Alex Gaynor 在他的演讲中解释了 pickle 的一些问题 "Pickles are for delis, not software" ,包括安全性、可靠性、人类可读性。我通常对在 python 程序中的数据上使用 pickle 持谨慎态度。一般来说,我更喜欢使用 json 或我自己指定的其他序列化格式手动传递数据。

我感兴趣的情况是:我在 python 程序中收集了一些数据,并且我想在其上并行运行一个令人尴尬的并行任务很多次。

据我所知,目前在 python 中执行此操作的最好的并行化库是 dask-distributed,其次是 joblib-parallel、concurrent.futures 和 multiprocessing。

但是,所有这些解决方案都使用 pickle 进行序列化。考虑到 pickle 的各种问题,我倾向于简单地将 json 数组发送到 GNU并行的子进程。但当然,这感觉就像是黑客攻击,并且失去了 Dask 的所有奇特优点。

是否可以为我的数据指定不同的默认序列化格式,但继续在 python(最好是 dask)中并行化,而不诉诸 pickle 或 gnu 并行?

最佳答案

页面http://distributed.dask.org/en/latest/protocol.html关于 Dask 如何在一组分布式工作人员和调度程序之间传递信息的内容值得一读。可以看出,(cloud)pickle 涉及诸如函数之类的内容,我们希望能够将其传递给工作人员,以便他们可以执行它们,但数据通常是通过相当有效的 msgpack 序列化发送的。无法使用 JSON 序列化函数。事实上,有一个相当灵活的内部调度机制来决定使用什么机制序列化什么,但这里没有必要深入讨论。

我还想说,pickle 是在进程之间传递时序列化某些事物的一种很好方式,只要您不辞辛劳地确保它们之间的环境一致,这是一个假设达斯克制造。

-编辑-

您当然可以在 JSON 中包含函数名称或转义符,但我建议这与 pickle 一样脆弱。

关于python - 无需 pickle 即可并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490702/

相关文章:

python - Linux配置工具的通用系统架构

Python/Django 将枚举列表渲染到表中

用于调试的 Python 数组可视化工具

c++ - 如何优化这种组合算法?

dask - 将 dask 集合异步存储到文件/CSV

python - Pod错误-Fastparquet的建筑轮子失败

Python 处理打开另一个工具的 cmd 命令

c++ - 如何正确使用 C++ STL 并行性

c++ - 部署使用英特尔 Parallel Studio 的项目时出现问题

gdal - 如何将 GRIB 文件目录加载到 Dask 数组中