我正在寻找使用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:如果这很明显,你觉得有必要对这篇文章进行投票,请同时提供明显的答案。谢谢。答案 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))