Распараллеливание построения графика matplotlib
Я строю большое количество отрезков на графике mpl и пытаюсь распаралеллить этот процесс. Использую Pool, каждый процесс строит свою порцию отрезков на общей Figure. Но когда я вызываю plt.show() после выполнения всех процессов, получаю чистый график, на котором нет ничего, хотя ожидаю увидеть на нем работу процессов. Если вызвать plt.show() в дочерних процессах, получится график с отрезками, построенными этим процессом. Подскажите что я делаю не так, или может есть другой способ ускорить построение большого числа отрезков?
def build_plot_tree(ray):
head = RayTree(ray)
build_tree(head, ell, 3)
plot_tree(head, ax) # функция строящая отрезки
plt.show() # на графике только те отрезки что построил этот процесс
return
rays = [Ray([5, 5.1, 0.6], [-1, -1, 0]), Ray([5, 4.5, 0.6], [-1, -1, 0])]
ell = Ellipsoid(2, 1.5, 1, 0.2, 0.2, 0.2, 1.5)
fig = plt.figure(figsize=[10, 10])
ax = fig.add_subplot(projection='3d')
plot_ellipsoid(ell, ax)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(-2, 2)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() * 3)
pool.map(build_plot_tree, rays)
pool.close()
plt.show() # чистый график, без данных
Источник: Stack Overflow на русском