#python #multiprocessing #itertools
#python #многопроцессорная обработка #python-itertools
Вопрос:
Есть ли простой способ в Python 3 выполнить итерацию по произведению из другого списка и использовать многопроцессорную обработку.Объедините, чтобы ускорить вычисления?
Код для последовательного вычисления выглядит следующим образом:
from itertools import product
data1 = [1,2,3,4]
data2 = ['a', 'b', 'c', 'd']
def main():
for element in product(zip(data1, data2), repeat = 2):
print(element)
if __name__ == '__main__':
main()
Output:
(1, a),(1, a)
(1, a),(2, b)
(1, a),(3, c)
(1, a),(4, d)
(2, b),(1, a)
(2, b),(2, b)
(2, b),(3, c)
(2, b),(4, d)
...
Теперь я знаю, что могу использовать многопроцессорную обработку.Пул для параллельной итерации по произведению (нескольких) списков, но он поддерживает только один повторяющийся аргумент:
import multiprocessing
from itertools import product
data1 = [1,2,3,4]
data2 = ['a', 'b', 'c', 'd']
def func(myfunc):
return myfunc
if __name__ == '__main__':
with multiprocessing.Pool(4) as pool:
pool.map(func, product(data1 ,repeat = 2))
Поскольку я хочу добавить data2 и использовать все процессоры для дальнейших вычислений, я попробовал несколько других функций, таких как multiprocessing.starmap и functools. Ни один из них не работал для меня.
Мой вопрос в том, есть ли у вас простое решение для этой проблемы, или мне нужно думать «из коробки» и определять специальные процессы для каждого шага. Я надеялся решить эту проблему с помощью многопроцессорной обработки.Объедините, поскольку не имеет значения, в каком порядке выполняются вычисления.
Спасибо.
Комментарии:
1. Мне не совсем ясно, что именно вы просите из-за пользователя
zip
для data1 и data2 в первом примере кода. В чем именно проблема с использованиемPool
? Вы получаете сообщение об ошибке? Какой результат вы получаете в сравнении с тем, какой результат вы хотите?2. Ну, каким-то образом я понял, что это работает и с zip:
pool.map(func, product(zip(data1, data2), repeat = 2))
Мой вопрос в том, есть ли другой способ? Мне как-то нужна ускоренная реализация. Когда яtime
выполняю вычисления, это происходит всего на 20-30% быстрее с большим количеством пулов, чем 1.3. Когда вы говорите «больше пулов», что вы имеете в виду? Больше процессов в одном пуле?
4. Да, я имел в виду больше процессов в пуле (4 или выше)