用于两个列表的Python多处理itertools

时间:2016-10-20 15:55:19

标签: python multiprocessing itertools

Python 3中是否有一种简单的方法可以迭代不同列表的产品并使用multiprocessing.Pool来加速计算?

顺序计算的代码如下:

from itertools import product

data1 = [1,2,3,4]
data2 = ['a', 'b', 'c', 'd']

def main():
    for element in product(zip(data1, data2), repeat = 2):
        print(element)

if __name__ == '__main__':
    main()

Output:
(1, a),(1, a)
(1, a),(2, b)
(1, a),(3, c)
(1, a),(4, d)

(2, b),(1, a)
(2, b),(2, b)
(2, b),(3, c)
(2, b),(4, d)
...

现在我知道我可以使用multiprocessing.Pool并行迭代(多个)列表的产品,但它只支持一个可迭代的参数:

import multiprocessing
from itertools import product

data1 = [1,2,3,4]
data2 = ['a', 'b', 'c', 'd']

def func(myfunc):
    return myfunc

if __name__ == '__main__':
    with multiprocessing.Pool(4) as pool:
        pool.map(func, product(data1 ,repeat = 2))

由于我想添加data2并使用所有CPU进行进一步计算,我尝试了其他几个函数,如multiprocessing.starmap和functools。他们都没有为我工作。

我的问题是,如果你有一个简单的解决方案来解决这个问题,或者我需要考虑“开箱即用”并为每一步定义特殊流程。我希望通过multiprocessing.Pool来解决这个问题,因为计算的顺序无关紧要。

感谢。

0 个答案:

没有答案