【问题标题】:Python2: multiprocessing using a Pool of workers with multiple argumentsPython2:使用具有多个参数的工人池进行多处理
【发布时间】:2018-08-24 13:18:31
【问题描述】:

我想在 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

【问题讨论】:

  • 事实上,fun 函数中的 return 不是有意缩进的吗?还是在为 StackOverflow 格式化您的问题时发生了这种情况?
  • 只是格式的问题。
  • 您的程序@L.Chau 的预期输出是什么?对于任何对实际错误感兴趣的人:TypeError: fun() takes exactly 2 arguments (1 given)

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


【解决方案1】:

您在这里遇到的主要问题是,您想要作为参数传递给工作人员的元组被包装在 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 语句,请参阅here 它有什么用处。还有here is the according PEP 3105 -- Make print a function


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

【讨论】:

    猜你喜欢
    • 2015-06-08
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2021-05-14
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多