2010-04-24 67 views
4

我正在尝试使用python获取某些性能,这些任务可以使用http://docs.python.org/library/multiprocessing高度并行化。如何为大型数据集中的python多处理选择块大小

当看着他们的库时,他们说使用块大小来处理很长的迭代。现在,我的迭代并不长,其中包含的一个字节是巨大的:〜100000条目,其中元组作为键和数组的numpy值。

我该如何设置chunksize来处理这个问题,以及如何快速传输这些数据?

谢谢。

回答

2

一次处理多个工作人员处理这个单个大件物品的唯一方法是将其拆分。 multiprocessing的工作方式是将工作分为单位,但最小的单位是一个对象 - 它无法知道如何以合理的方式分割单个对象。相反,你必须自己做。而不是发送需要处理的指令,将指令分成较小的工作单元,然后将这些指令发送出去。如果因为所有的数据都是相互依赖的,所以你不能拆分字典,那么你也不能真正分离工作。

+0

阿好吧有道理。目前,工作人员每个人都抓住巨大的字典,制作一份副本,修改它,然后发回他们的版本。 (不完全重量轻)。因为你认为那个知道他的python多重处理的人:如果巨人在哪里只能读取,是否有办法让所有工作人员有效地访问其数据? (这对于线程来说很容易,但是对于多处理,看起来好像很难处理) – Sandro 2010-04-24 21:59:53

+0

如果你不在Windows上,并且在产生工作人员之前将这个“只读”字典作为进程的一部分,将其存储在(例如)全球或封闭的本地,所有工作人员都可以访问它,而不会受到序列化成本的影响。 – 2010-04-24 22:26:30

+0

呃哦,我现在才意识到我使用了错误的术语。我实际上使用Pool.map_async()函数来完成所有这些。我是否有权假定,通过使用映射,没有解决方案,只能通过分叉。重新加入一起会产生严重的成本吗? – Sandro 2010-04-24 23:27:26