使用带地图的itertools

时间:2014-02-12 00:18:45

标签: multiprocessing itertools

我正在寻找使用itertools和map函数的“成熟”pythonic方法,希望用于多处理。我将尝试举例说明。我将使用python的map函数,因为它比多处理中的函数更简单。

假设你有一个函数可以说两个参数。

def twoparameterfunction(x,y):
    return somethingnice(x,y)


xs, ys = zip(*[pairs for pairs in itertools.combinations([1,2,3,4,5],2)])

results = map(twoparameterfunction,xs,ys)

是我让map将函数应用于itertools.combinations生成的对的一种方法。基本上,我首先从对列表中创建一对列表,然后使用该对列表作为映射函数。

这不可能是这样做的!我希望有人能告诉我更好的方法。

ps:如果这很明显,你觉得有必要对这篇文章进行投票,请同时提供明显的答案。谢谢。

1 个答案:

答案 0 :(得分:1)

itertools.starmap为非并发案例提供了解决方案:

from itertools import starmap

results = list(starmap(twoparameterfunction,
                       itertools.combinations([1, 2, 3, 4, 5], 2)))

对于多处理地图,您无法使用星图。 (您也不能使用多个输入迭代,因此您也无法使用zip转置解决方案。)在这种情况下,最好定义一个帮助程序一个元组并将元素传递给twoparameterfunction

def starfunc(x_y):
    return twoparameterfunction(*x_y)

results = some_appropriate_pool.map(
        starfunc, itertools.combinations([1, 2, 3, 4, 5], 2))