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来解决这个问题,因为计算的顺序无关紧要。
感谢。