[英]Python2: multiprocessing using a Pool of workers with multiple arguments
我想在 python-2.x 中使用multiprocessing.Pool
尝试并行计算。
我想出了以下简单的代码。 不幸的是,我无法产生任何错误消息。
有人可以指出我的代码可能有什么问题的正确方向吗?
import numpy as np
import multiprocessing as mp
import timeit
def fun(i,j):
return i+j
num=2
num_cores = mp.cpu_count()
p = mp.Pool(num_cores)
results = np.array([])
tasks = np.array([(i, j) for i in range(0,num) for j in range(0, num)])
if __name__ == '__main__':
results = np.array(p.map(fun,tasks))
print results
您在这里遇到的主要问题是,您想作为参数传递给工作人员的元组被包装在numpy.ndarray
,因此它只是一个参数,因为numpy.ndarray
没有展开。
这应该适合你:
from __future__ import print_function
import numpy as np
import multiprocessing as mp
import timeit
def fun(ij):
s = sum(ij)
print('{0} + {1} = {2}'.format(ij[0], ij[1], s))
return s
num=2
num_cores = mp.cpu_count()
p = mp.Pool(num_cores)
results = np.array([])
tasks = np.array([(i, j) for i in range(0,num) for j in range(0, num)])
if __name__ == '__main__':
results = np.array(p.map(fun,tasks))
print(results)
这个脚本的输出是:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 2
[0 1 1 2]
我添加了from __future__ import print_function
语句,看看这里有什么好处。 这是根据 PEP 3105 - 使打印功能。
结束语:更全的解决方案,可以发现这里从用户senderle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.