В связи с тем, что наш кластер структурирован с точки зрения планирования, для длинных вычислений желательно иметь много (относительно) коротких рабочих мест.
Как правило, это означает, что у меня много скриптов Python общего вида
def Function():
results = numpy.zeros([1,3])
a = random.uniform(hi,low)
b = random.uniform(hi,low)
c = LongComputation(a,b)
results[0,0] = a
results[0,1] = b
results[0,2] = c
return results
Игнорируя это в этом примере, это немного чрезмерно спроектировано в этом примере с использованием массивов. Как правило, отсюда я отправляю задания с использованием массива slurm, и каждый сценарий сохраняет файл .csv с именем файла, к которому добавлен идентификатор массива, поэтому я получаю run_0.csv, run_1.csv и т. Д. И т. Д. .
Тогда я просто cat
все это вместе. Я опасался просто записывать результаты в один и тот же файл .csv из-за двух заданий, которые выполнялись одновременно, пытаясь записать в файл одновременно. Метод cat
работает достаточно хорошо, но он оставляет каталоги с сотнями тысяч файлов в них - есть, очевидно, более элегантный способ сделать это, который может обрабатывать несколько независимых заданий из массива (а не внутренних параллельных процессов), пытаясь писать одновременно?