Как я могу запустить цикл for параллельно для функции класса в Python? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть класс My_mechanism, который содержит функцию velocity_params, которая записывает результаты в файл csv. Мне нужно перебрать некоторый диапазон, но итерация очень медленная (используется только одно ядро ​​процессора). Есть ли способ ускорить процесс? Выполнение данного кода занимает около 10 минут, наконец, мне нужно выполнить итерацию для всех i,j,k,l в My_mechanism(i,j,k,l,2).

from crankshaft import *
import multiprocessing
import time

initial_time = time.time()

for i in range(10,20):
    m = My_mechanism(i,50,20,14,2)
    try:
        m.velocity_params()
    except Exception:
        continue

print("Processing time : ",time.time()-initial_time,"s")

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Обычно запись в CSV-файл занимает много времени. Я бы порекомендовал запустить всю вашу обработку данных заранее (это можно распараллелить) и записать вывод в конце.

Если вы хотите получить более подробный ответ, пожалуйста, будьте более конкретны о том, какой csv writer вы используете, чтоваши данные и т. д.

0 голосов
/ 08 октября 2019

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

import multiprocessing as mp

parallelism = 4

p = mp.pool(parallelism)

res = p.map(my_mechanism, [x for x in range(10,20)])

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

...