У меня есть код, который загружает файл, делает некоторый анализ, строит его и затем сохраняет его в формате png. Этот процесс долгий (есть много файлов, каждый по 260 МБ), и я бы предпочел запустить его на нашей университетской машине с 48 ядрами.
Независимо от того, что я пытаюсь сделать, мой код в конечном итоге занимаетвсе ядра, их перегрузка и проблемы с ИТ-отделом.
Что я делаю не так? Я привык к тому, что некоторые библиотеки (например, AGAMA) имеют встроенную многопроцессорность и запрашивают только OMP_NUM_THREADS = N, поэтому я могу неправильно понять, как решить эту проблему. Поскольку есть одна функция, которая использует разные файлы и не зависит от смежных процессов, является ли многопроцессорный правильный выбор?
Я определил функцию, которая зависит только от одной переменной: числа, присутствующего в имени файла для загрузки.
После определения функции я впервые использовал функцию пула из многопроцессорной библиотеки и ограничил ее двумя процессами (что, как я предполагал, ограничило бы ядра). Код на секунду запускается на двух ядрах, затем обгоняет их все. Наконец, я использовал функцию семафора и установил ограничение на 4 ядра - результат тот же. Немного работает на 4 ядрах, затем захватывает все ядра.
#These are my loaded libraries
import matplotlib; matplotlib.use('agg')
import multiprocessing
import pynbody as pb
import numpy as np
from astroML.stats import binned_statistic_2d as bs2d
import matplotlib.pyplot as plt
def plot(i):
a=loadfile(i)
...
plt.savefig()
plt.close()
if __name__ == '__main__':
sem=multiprocessing.Semaphore(4)
pool = multiprocessing.Pool(processes=2)
pool.map(plot, range(328))
pool.close()
Результаты - код работает, но за счет каждого ядра на общей машине университета. Нет сообщений об ошибках.
Я ожидаю, что код будет запускаться на указанных ядрах без внешних команд терминала, таких как taskset -cp, которые я только, как выбрать конкретные ядра, не выбирая доступные самостоятельно.
Везде, где я ищу, вопрос всегда противоположен «Как использовать 100% ядер». Мне нужно иметь возможность изменить этот параметр, чтобы не перегружать машину университета.