07 Июл 2023
2 мин
605

Использование pool.map с несколькими аргументами в Python

В Python библиотека multiprocessing предоставляет удобные инструменты для параллельных вычислений. Одной из таких функций является pool.map, которая применяет

Содержание

В Python библиотека multiprocessing предоставляет удобные инструменты для параллельных вычислений. Одной из таких функций является pool.map, которая применяет функцию ко всем элементам входного списка. Однако, возникает вопрос, как применять эту функцию, если необходимо передать несколько аргументов.

Рассмотрим пример. Предположим, есть функция, которая принимает два аргумента:

def add_numbers(x, y):
    return x + y

И есть два списка чисел, которые нужно поэлементно сложить:

numbers1 = [1, 2, 3, 4, 5]
numbers2 = [6, 7, 8, 9, 10]

Как использовать pool.map, чтобы сложить эти списки параллельно?

В Python нет встроенной функции pool.map, которая принимает несколько аргументов. Однако, можно обойти это ограничение, используя функцию functools.partial или передав аргументы в виде кортежа.

Использование functools.partial

С помощью functools.partial можно зафиксировать определенное количество аргументов функции. Например, можно зафиксировать один из аргументов функции add_numbers:

from functools import partial

add_numbers_partial = partial(add_numbers, y=5)

Теперь функция add_numbers_partial принимает только один аргумент, и его можно передать в pool.map.

Использование кортежей

Альтернативным способом является передача аргументов в виде кортежей. Для этого функция должна быть изменена так, чтобы принимать один аргумент — кортеж, из которого затем извлекаются все необходимые аргументы:

def add_numbers(args):
    x, y = args
    return x + y

Затем аргументы можно передать в pool.map в виде списка кортежей:

arguments = list(zip(numbers1, numbers2))

Таким образом, можно использовать функцию pool.map с несколькими аргументами, применив один из предложенных подходов.

Содержание

Добавить комментарий

Определи профессию по рисунку