python - 如何为带有 6 个不同类型和大小的参数的函数实现多处理

标签 python multiprocessing python-multiprocessing

我有一个函数需要 5 个或更多参数作为输入,这些参数具有不同的类型和大小,在这种情况下如何应用多重处理。

让我们在这个虚拟示例中说

功能:

def func(arr1, arr2, arr3, mtx1, mtx2, st):

# the function will output three arrays that has the same size as the arr1
result1 = np.zeros((len(arr1), 1))
result2 = np.zeros((len(arr1), 1))
result3 = np.zeros((len(arr1), 1))

# the function will make iteration through the 0 to the length of the arr1
for i, _ in enumerate(arr1):
    # it does a lot of computations using the #th number of arr1, arr2, arr3, but takes the whole matrices mtx1 amd mtx2 
    # some details of the calculation based on the setting of the string 

return result1, result2, result3

主要功能是定义所有参数,然后输入到函数中。

如果名称 == '主要':

arr1 = np.array([100,200,300])
arr2 = np.array([400,500,600])
arr3 = np.array([700,800,900])
mtx1 = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
mtx2 = np.random.rand(10,10)
st = 'string'

results = func(arr1, arr2, arr3, mtx1, mtx2, str)

我尝试按照其他人的建议使用池和 map ,例如:

p = Pool()
results = p.map(func, arr1, arr2, arr3, mtx1, mtx2, st)
p.close()
p.join()

这会给出错误:

map() 需要 3 到 4 个位置参数,但给出了 8 个

我在网上找到的大多数多处理示例都采用与函数输入相同大小的数组,并且该函数只进行非常简单的数学计算。但这不是我的情况,我该如何解决这个问题?

谢谢!

最佳答案

您对map的使用有点不对劲。第二个参数应该是一个可迭代的 - 即元组或列表。就像这样:

results = p.map(func, (arr1, arr2, arr3, mtx1, mtx2, st))

对于多次调用同一函数,您可以尝试使用星图:https://docs.python.org/dev/library/multiprocessing.html#multiprocessing.pool.Pool.starmap

星图的参数应该是一个可迭代的,它将为您的函数解包。

关于python - 如何为带有 6 个不同类型和大小的参数的函数实现多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55557839/

相关文章:

python - 如何从单词列表中创建一个 Boggle Board? (反向 Boggle 解算器!)

python - np.isnan 在 dtype "object"的数组上

python - python中的多线程系统调用

python - IPC 在单独的 Docker 容器中跨 Python 脚本共享内存

Python Pyserial 同时从多个串口读取数据

Python:用句点(或其他字符)替换字符串中除第 n 个字母外的每个字母

python - 在 Python GTK3 中设置条目背景颜色并设置回默认值的最佳方法

Python, Multiprocessing : what does process. join() 做什么?

c - 理解 Unix 中的 fork 机制

python - 如何将 'from Queue import Queue, Empty' 从 Python 2 转换为 Python 3?