У меня тяжелая пакетная работа, поэтому я нарезал ее на 30 (количество моих процессоров) мини-пакетов и сделал 30 multiprocessing.Process
для их выполнения (по какой-то причине я не использовал multiprocessing.Pool
).Для возвращаемого значения я использовал 30 multiprocessing.Queue
.Это обзор моего кода:
def minibatch(q, data, i):
do_some_work_data_i
q.put(return_value)
if __name__ == '__main__':
q1 = Queue()
p1 = Process(target=minibatch, args=(q1, data[1], 1))
p1.start()
q2 = Queue()
p2 = Process(target=minibatch, args=(q2, data[2], 2))
p2.start()
first_return_value = q1.get()
second_return_value = q2.get()
p1.join()
p2.join()
Теперь я обнаружил, что он слишком медленный!если каждая мини-партия занимает 10 секунд, я ожидаю, что мой код запускается около 10 секунд, но это занимает гораздо больше времени.Так что мне делать вместо этого?