Сначала ошибка в вашем вызове операции map
-. Это должно быть:
arows = list(range(0, rows))
acolumns = list(range(0, columns))
with mp.Pool() as pool:
img = pool.map(myFunc, constant_args, arows, acolumns)
Однако, это может не привести к тому, что вы ищете, поскольку это просто проходит через 3 аргумента (которые должны быть списками). Он не работает через их комбинации, особенно arows
и acolumns
. Например, если constant_args
имеет 3 элемента, Pool.map
остановится после 3 итераций, не пробегая более длинные списки arows
или acolumns
.
Сначала вы должны сделать все комбинации строк и индексов столбцов.
from itertools import product, repeat
comb = list(product(arows, acolumns))
Это что-то вроде (все возможные комбинации)
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
Далее я бы застегнул эти комбинации с вашей constant_args
constant_args = [10, 11]
arguments = list(zip(comb , repeat(constant_args)))
Это производитсписок кортежей, каждый из которых содержит два элемента. Во-первых, это ваша позиция в пикселях, а во-вторых, ваша constant_args
[((1, 1), [10, 11]),
((1, 2), [10, 11]),
((1, 3), [10, 11]),
((2, 1), [10, 11]),
((2, 2), [10, 11]),
((2, 3), [10, 11]),
((3, 1), [10, 11]),
((3, 2), [10, 11]),
((3, 3), [10, 11])]
Теперь мы должны немного изменить ваш myFunc
:
def myFunc(pix_id, constant_args):
new_pixel = quad(integrand, constant_args, pix_id[0], pix_id[1])
... other calculations ...
return new_pixel
Наконец, мы используем Pool.starmapчтобы применить магию (см. здесь: использование starmap ):
with mp.Pool() as pool:
img = pool.starmap(myFunc, arguments )
В результате starmap
принимает список кортежей и предоставляет их в качестве входных данных для функций. Однако starmap
автоматически распаковывает список кортежей в отдельные аргументы для вашей функции. Первый аргумент pix_id
состоит из двух элементов, а второй аргумент constant_args
.