У меня небольшие проблемы с Python multiprocessing.Pool
. У меня есть два списка numpy
массив a
и b
, в котором
a.shape=(10000,3)
и b.shape=(1000000000,3)
Тогда у меня есть функция, которая выполняет некоторые вычисления, такие как
def role(array, point):
sub = array-point
return (1/(np.sqrt(np.min(np.sum(sub*sub, axis=-1)))+0.001)**2)
Далее мне нужно вычислить
[role(a, point) for point in b]
Чтобы ускорить его, я пытаюсь использовать
cpu_num = 4
m = multiprocessing.Pool(cpu_num)
cost_list = m.starmap(role, [(a, point) for point in b])
m.close
Весь процесс занимает около 70 с, но если яустановите cpu_num = 1
, время обработки уменьшится до 60 с ... Мой ноутбук имеет 6 ядер, для справки.
Здесь у меня есть два вопроса:
- Есть ли что-то, что я сделал неправильнос
multiprocessing.Pool
? почему время обработки увеличилось, если я установил cpu_num = 4
? - для такой задачи (каждый цикл for - очень крошечный процесс), следует ли мне использовать многопроцессорность для ускорения? Я чувствую, что каждый раз, заполнение Python
Pool
занимает больше времени, чем функция процесса role
...
Любые предложения действительно приветствуются.