Многопроцессорный пул с методом, который требует более одного аргумента в python - PullRequest
1 голос
/ 25 февраля 2020

Я новичок в мульти-обработке и python, из документации https://docs.python.org/3/library/multiprocessing.html

Мне удалось запустить приведенный ниже код.

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

Но если f(x) изменить на f(x,y,z), чтобы

def f(x, y, z):
        return x*y*z

Каков синтаксис для передачи 3 аргументов f(x, y, z) из метода p.map?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2020

Может быть, вы ищете starmap?

starmap(func, iterable[, chunksize])

Подобно map () за исключением того, что элементы итерируемого объекта ожидаются быть итерируемыми, которые распакованы как аргументы.

Следовательно, итерация из [(1,2), (3, 4)] приводит к [func(1,2), func(3,4)].

Новое в версии 3.3.

1 голос
/ 25 февраля 2020

Используйте p.starmap(), он предназначен именно для этого случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...