字典中每个键的Python多处理

时间:2014-09-17 13:42:18

标签: python python-3.x dictionary multiprocessing python-multiprocessing

我是python的新手,我正在尝试并行扩展我的处理。我有一个包含一定数量元组的文件,每个元组在最后一列中都有一定的值。我想拆分这个文件数据并将我的函数并行应用到每个块。但问题是根据最后一列值将数据拆分为块,并为每个块应用函数。例如,最后一列可能有' a'对于一些元组和' b'对某些人和' c'对于一些。所以在那种情况下,我应该得到三个块并且并行处理它。最后一列中的唯一值数量可能会发生变化,具体取决于数据集,因此我需要相应地使用CPU。

Q1: 我到现在为止尝试的是阅读文件并根据记录创建一个字典,所以基本上是上面一个的三个键值对,一个用' a'作为关键和所有记录有' a'作为价值和相同的' b'并且' c'。我可以在多处理中使用chunksize,但这里它不是大小,它基于密钥,所以我怎样才能实现这一点?

Q2: 处理完上面的块后,我需要一起输出,顺序没关系,然后我需要使用整个输出进行进一步处理,如何使我的主程序等到所有这些过程完成?

如果需要进一步输入,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

假设,正如您所描述的,您在字典d上有三个值作为值,并希望将函数f分别应用于每个集合:

from multiprocessing import Pool
p = Pool()                                   #number of processes = number of CPUs
keys, values= zip(*d.iteritems())            #ordered keys and values
processed_values= p.map( f, values )         #apply the function f to each set and wait for result
#then proceed to join the three sets