Python2:使用具有多个参数的工作程序池进行多处理

时间:2018-08-24 13:18:32

标签: python threadpool python-2.x python-multiprocessing

我想尝试使用multiprocessing.Pool在python-2.x中进行并行计算。

我想出了以下简单代码。 不幸的是,我无法产生任何错误消息。

有人可以指出我正确代码的正确方向吗?

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

1 个答案:

答案 0 :(得分:0)

这里的主要问题是,要作为参数传递给工人的元组被包裹在numpy.ndarray中,因此它只是一个参数作为{{1 }} 不会展开。


这应该对您有用:

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] 语句,请参见here。还有here is the according PEP 3105 -- Make print a function


最后评论:here可以从用户senderle中找到更全面的解决方案。