Этот вопрос повторяет предыдущий вопрос Почему «кроме: передать» плохую практику программирования? в приложении к SLURM
инструменту для параллельных вычислений. Я понимаю, что это может быть не лучшее место, чтобы спросить, но буду благодарен за любой совет.
Как это работает с slurm, я использую команду sbatch
, чтобы отправить файл script.sh
для параллельных вычислений с различнымипараметры. Моя script.sh
может быть упрощена до основной команды srun python3 py_script.py
. Я опустил ненужные детали.
Наконец, py_script.py
содержит следующий бесконечный цикл (количество прогонов заранее неизвестно):
import sys
while True:
try:
<calculate condition>
if condition == 0:
print("Finishing.")
sys.exit(0)
<do stuff otherwise>
except Exception as e:
print("Encountered error" + e )
sys.exit(-1)
print('Calculating')
<do calculations>
Моя проблема в том, что когда condition==0
выполнено (я проверял, что это всегда происходит), скрипт выводит «Finishing» в выходной файл, но, очевидно, продолжает работать, как если бы sys.exit(0)
не был обработан SLURM. Я вижу бегущий код (R) в выводе squeue
. В то же время я уверен, что цикл остановился, потому что я больше не вижу «Расчет» печати в журнале, и журнал больше не обновляется. Так что это не проблема, упомянутая в sys.exit (), не выходящая из python . Я подумал, что это может быть из-за того, что я нахожусь в блоке try... catch...
, но ответы на предыдущий вопрос Почему «кроме: пройти» плохая практика программирования? ясно указывают, что Exception
невключите такие вещи, как SystemExit
, чтобы я мог выйти. Что меня еще больше раздражает, так это то, что такое поведение не всегда происходит, а только при некоторых запусках из пакета (все похожие). Это также, похоже, не произошло до последнего обновления системы SLURM
, но здесь я не уверен.
Кто-нибудь имеет какое-либо представление о том, что может происходить?
Можетэто будет такой же вопрос, как здесь? R параллельное зависание задания