Использование 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()
→ Ссылка