在Python中并行运行一个函数



我试图在Python中并行运行像f这样的函数,但有两个问题:

  1. 当使用map时,函数f不适用于数组ab的所有排列元组。
  2. 当试图使用Pool,我得到以下错误:
TypeError: '<=' not supported between instances of 'tuple' and 'int'
def f(n,m):
x = n * m
return x
a = (1,2,3,4,5)
b = (3,4,7,8,9)
result = map(f, a, b)
print(list(result))
#now trying parallel computing
from multiprocessing import Pool
pool = Pool(processes=4)
print(*pool.map(f, a, b))

我没有对您的#1问题进行任何更改,并从使用map()获得预期的结果。你似乎对它的工作原理有一个不正确的假设,但没有为你的例子提供预期和实际结果。

对于#2,要返回与#1相同的答案,对于使用multiprocessing的实例,需要使用starmap()而不是map(),然后使用zip()参数列表来提供参数集。如果在没有fork的操作系统上(为了可移植性,如果你是),只有当它是主进程时才运行全局代码,而不是使用if __name__ == '__main__':习惯用法的派生进程:

from multiprocessing import Pool
def f(n,m):
x = n * m
return x
if __name__ == '__main__':
a = (1,2,3,4,5)
b = (3,4,7,8,9)
result = map(f, a, b)
print(list(result))
#now trying parallel computing
pool = Pool(processes=4)
print(*pool.starmap(f, zip(a, b)))

输出:

[3, 8, 21, 32, 45]
3 8 21 32 45

如果你真的想要在#1中提到的排列,使用itertools.starmappool.starmapitertools.product(a,b)作为参数代替。

相关内容

  • 没有找到相关文章

最新更新