Каков наилучший способ многопроцессорности для циклов? - PullRequest
1 голос
/ 08 апреля 2020

Я изучаю основы многопроцессорности и хочу разделить циклы for на отдельные процессы, которые будут обрабатываться на разных ядрах процессора. Я планирую реализовать многопроцессорную обработку в существующем скрипте, который выполняет сложные вычисления.

Сейчас мой подход выглядит следующим образом:

import multiprocessing as mp
from functools import partial

def function(a, b, numbers):
    return a*b

if __name__ == '__main__':
    a = 1
    b = 2
    numbers = range(1000)
    func_part = partial(function, a, b)
    # Pool function
    result = mp.Pool().map(func_part, numbers)
    print(result)

    # equivalent for loop
    L = []
    for i in numbers:
        L.append(function(a, b, i))
    print(L)
  1. Есть ли лучший подход при этом?

  2. Можно ли получить итератор numbers в качестве первого параметра function, не нарушая его? numbers должно быть передано последней функцией map, как кажется.

1 Ответ

1 голос
/ 08 апреля 2020

вы можете использовать менеджер контекста:

with mp.Pool() as p:
    print(p.map(func_part, numbers))

Можно ли получить номера итераторов в качестве первого параметра функции, не нарушая его?

да, это возможно, но вы не передаете итератор функции, вы передаете элемент из вашей numabers переменной

def function(number, a, b, ):
    return a*b

a = 1
b = 2
numbers = range(1000)
func_part = partial(function, a=a, b=b)



with mp.Pool() as p:
    print(p.map(func_part, numbers))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...