У меня есть приложение, которое в основном многопоточное: поток 1 - это вычисление, а поток 2 - это GUI (Tkinter). Одна из частей вычисления включает функцию с l oop. Поэтому я решил использовать здесь многопроцессорность таким образом:
def mpw1(idw_tree, mapsdata, inlines, xlines, x, y, dfattrs, calcplan, attrsdim, mdim):
n_cores = os.cpu_count()
flatcubec2 = np.zeros((attrsdim,mdim))
with ProcessPoolExecutor(n_cores) as ex:
args = ((i, calcplan, idw_tree, mapsdata, dfattrs, flatcubec2, inlines, xlines, n_cores) for i in range(n_cores))
flatcubec2 = ex.map(circle, args)
return flatcubec2
где circle
- это просто вычислительная функция (скажем, она что-то считает).
Но что странно, так это что установка n_cores
в максимально возможной степени не позволяет мне добиться максимальной производительности. Вот некоторая информация:
8 ядер (макс.) - 17 se c
6 ядер - 14 se c
4 ядра - 12 se c
3 ядра - 14 se c
2 ядра - 17 se c
Что на самом деле происходит? Почему использование максимального количества оборудования не позволяет добиться максимальной производительности? Проблема в моем способе использования многопоточности ?