Использование multiiprocessing увеличивает время выполнения
Без multiprocessing время выполнения - 7 секунд. С ним - Более 5 минут. Как правильно использовать multiprocessing?
for global_cycle in range(30000):
data_z = {}
dw = {}
for spliting_cycle in range(quan_of_spliting):
data_z_ninside, data_z_inside = Pipe()
p = Process(target=forward, args=(w_slovar["Split " + str(spliting_cycle)], data_z_inside, x,))
p.start()
data_z["Split " + str(spliting_cycle)] = data_z_ninside.recv()
p.join()
for spliting_cycle in range(quan_of_spliting):
cost_nin, cost_inside = Pipe()
dw_nin, dw_inside = Pipe()
p2 = Process(target=backward, args=(cost_inside, dw_inside, w_slovar["Split " + str(spliting_cycle)], data_z["Split " + str(spliting_cycle)], y,))
p2.start()
cost += cost_nin.recv()
dw["Split " + str(spliting_cycle)] = dw_nin.recv()
p2.join()
for spliting_cycle in range(quan_of_spliting):
w_slovar_nin, w_slovar_inside = Pipe()
p3 = Process(target=update_weights, args=(dw["Split " + str(spliting_cycle)], w_slovar["Split " + str(spliting_cycle)], w_slovar_inside, learning_rate))
p3.start()
w_slovar["Split " + str(spliting_cycle)] = w_slovar_nin.recv()
p3.join()
Ответы (1 шт):
Автор решения: Kers
→ Ссылка
Как писали в комментарии multiprocessing это долго и кол-во процессов примерно должно быть равно кол-ву ядер процессора иначе теряется весь смысл. Попробуйте использовать потоки. Хотя чрезмерно большое кол-во потоков тоже не есть хорошо:
from threading import Thread
import time
def func(x): # Ваша функция
time.sleep(2)
print("func", x)
for i in range(500): # Запуск в цикле
potoc = Thread(target=func, args=[i], daemon=True)
potoc.start()
potoc.join()