Python пафос мутипроцессинга, один список и один объект в качестве аргументов
Я хочу использовать многопроцессорную обработку для ускорения нескольких вызовов функции, функция принимает в качестве аргумента два значения: переменную, которая изменяется для каждого вычисления, и постоянную переменную.
Вот код, который эмулирует мою проблему:
import pathos.pools as pp
p = pp.ProcessPool(4)
def add(x,y):
return x+y
x = [0,1,2,3]
y = 5
result = p.map(add, x, y)
Поскольку у не список, я получаю следующую ошибку:
TypeError: izip argument #2 must support iteration
В этом простом случае простым решением было бы сделать y
список постоянных значений:
y = [5 for value in x]
Но я бы хотел избежать этого решения, так как в моем случае у - сложный объект, который занимает довольно большой кусок памяти.
Спасибо за любые предложения
1 ответ
Вы можете просто использовать локальные переменные для функции, которую вы объявляете. Я часто делаю обертку для передачи не-итераций, например
def add(x,y):
return x+y
def add_wrapper(x):
y = 5
return add(x,y)
x = [0,1,2,3]
result = p.map(add_wrapper, x)
или же
def add(x,y):
return x+y
def add_wrapper(x):
return add(x,y)
y = 5
x = [0,1,2,3]
result = p.map(add_wrapper, x)