如何为具有大型数据集的python多处理选择块大小

如何为具有大型数据集的python多处理选择块大小,python,multiprocessing,large-data-volumes,Python,Multiprocessing,Large Data Volumes,我正试图使用python在一个任务上获得一些性能,这个任务可以使用python进行高度并行化 当查看他们的库时,他们说对很长的可重用项使用块大小。现在,我的iterable并不长,它包含的一个dict是巨大的:~100000个条目,元组作为键,numpy数组作为值 如何设置chunksize来处理此问题,以及如何快速传输此数据 谢谢。在多个工作人员中同时处理单个大型项目的唯一方法是将其拆分多处理的工作原理是将工作划分为多个单元,但你能提供给它的最小单元是一个对象——它不知道如何以合理的方式拆分单

我正试图使用python在一个任务上获得一些性能,这个任务可以使用python进行高度并行化

当查看他们的库时,他们说对很长的可重用项使用块大小。现在,我的iterable并不长,它包含的一个dict是巨大的:~100000个条目,元组作为键,numpy数组作为值

如何设置chunksize来处理此问题,以及如何快速传输此数据


谢谢。

在多个工作人员中同时处理单个大型项目的唯一方法是将其拆分<代码>多处理的工作原理是将工作划分为多个单元,但你能提供给它的最小单元是一个对象——它不知道如何以合理的方式拆分单个对象。你必须自己去做。不要发送要处理的dict,而是将dict拆分成更小的工作单元,然后将它们发送过来。如果因为所有数据都是相互依赖的,所以无法拆分dict,那么也无法真正拆分工作。

Ah ok有意义。目前,工人们每人都在抓取这个巨大的dict,复制一份,修改它,然后发回他们的版本。(不是很轻)。对于一个了解python多处理的人来说:如果巨型dict只在哪里读取,有没有一种方法可以让所有的工作人员根据需要高效地访问它的数据?(这对于线程来说很容易,但对于多处理,它似乎很快变得棘手)如果你不在Windows上,并且你在生成worker之前将此“只读”dict作为进程的一部分,并将其存储在(例如)全局或封闭的局部中,所有的worker都可以访问它,而不必承受序列化成本。哦,我现在才意识到我使用了错误的术语。实际上,我正在使用Pool.map\u async()函数来完成这一切。我是否正确地假设,使用map并没有解决方案,只有通过分叉。重新结合会有很大的代价吗?