如何对具有6个不同类型和大小的参数的函数实现多处理

2024-09-24 22:17:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它接受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

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

如果name='main':

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)

我试着按照其他人的建议使用游泳池和地图,比如:

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

这将导致以下错误:

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

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

谢谢


Tags: ofthe函数参数lennpzerosarray
1条回答
网友
1楼 · 发布于 2024-09-24 22:17:32

你对map的使用有点不当。第二个参数应该是iterable,即元组或列表。像这样:

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

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

星图的参数应该是一个iterable,它将为您的函数解包

相关问题 更多 >