Как перевести al oop на многопроцессорность? - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь распараллелить некоторый код. Вот что я пытаюсь сделать:

У меня есть функция test_cases, которая принимает несколько аргументов, создает и тестирует некоторые случаи в стороннем приложении. У меня 33 таких теста. В настоящее время я настроил для l oop счетчик индекса, который запускает каждый из тестов. Каждый тест возвращает массив, который затем сравнивается с массивом «ожидаемых значений» для этого массива. Если значения не верны, индекс отмечается, и я делаю другие вещи.

Я пытаюсь распараллелить так, чтобы одновременно выполнялось много тестов, и я получаю номера индексов, где тест не удался. Я исследовал многопроцессорность, но не понимаю этого правильно. Я использую Pool или Process?

Примеры, на которые я смотрел онлайн, показали базовые случаи c, но у меня есть трудности с переводом этих знаний в эту шкалу. Поэтому мой вопрос заключается в том, как настроить многопроцессорность для каждого теста, чтобы получить обратно массив для сравнения с ожидаемыми значениями?

1 Ответ

0 голосов
/ 28 января 2020

Добро пожаловать в переполнение стека! Как и в документах (https://docs.python.org/3/library/multiprocessing.html), вы хотите сначала создать объект пула с чем-то вроде пула (2), если у вас есть 2 доступных ядра. Если вы сделаете это с блоком with ... as ..., вы можете использовать объект внутри блока, после чего он будет очищен. Пример ниже взят из документов и применяет функцию "f" параллельно к элементам в списке, используя метод map объекта пула. Возможно, вам понадобится «starmap», который может обрабатывать список кортежей и позволяет f иметь несколько аргументов - проверьте это в документации.

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]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...