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)
Другие вопросы по тегам