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

用于两个列表的Python多处理itertools,python,multiprocessing,itertools,Python,Multiprocessing,Itertools,在Python3中有没有一种简单的方法来迭代不同列表的乘积,并使用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 _

在Python3中有没有一种简单的方法来迭代不同列表的乘积,并使用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并行迭代(多个)列表的乘积,但它只支持一个iterable参数:

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))
由于我想添加数据2并使用所有CPU进行进一步计算,我尝试了其他几个函数,如multiprocessing.starmap和functools。他们都不为我工作

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


谢谢。

由于第一个代码示例中的数据1和数据2使用了
zip
,所以我不完全清楚您到底在问什么。使用
池的确切问题是什么?你有错误吗?你得到的是什么输出,而你想要的是什么输出?不知怎的,我意识到它也适用于zip:
pool.map(func,product(zip(data1,data2),repeat=2))
我的问题是是否还有其他方法?我需要快速的实现。当我
time
计算时,如果池数大于1,计算速度只会加快20-30%。当你说池数更多时,你的意思是什么?一个池中有更多的进程?是的,我指的是池中有更多的进程(4个或更高)。由于第一个代码示例中的数据1和数据2使用了
zip
,所以我不完全清楚您到底在问什么。使用
池的确切问题是什么?你有错误吗?你得到的是什么输出,而你想要的是什么输出?不知怎的,我意识到它也适用于zip:
pool.map(func,product(zip(data1,data2),repeat=2))
我的问题是是否还有其他方法?我需要快速的实现。当我
time
计算时,如果池数大于1,计算速度只会加快20-30%。当你说池数更多时,你的意思是什么?一个池中有更多进程?是的,我指的是池中有更多进程(4个或更多)