2015-09-14 3 views
4

В настоящее время я запускаю часть кода Python в кластере. Часть правил, наложенных на меня slurm, заключается в том, что во время выполнения моего кода мой блок работает с timelimit. Это не проблема в большинстве случаев, так как я могу просто проверить свой код с помощью pickle, а затем перезапустить его.Операция записи прерывания и перезагрузки

В конце кода мне, однако, нужно записать все мои данные (я не могу писать до тех пор, пока все вычисления не будут завершены), что может занять некоторое время, так как можно собрать очень большие куски данных.

Моя проблема в том, что в некоторых случаях код заканчивается slurm, потому что он превысил допустимое время выполнения.

Есть ли способ прерывания операции записи, остановки кода и повторного запуска там, где я остановился?

ответ

0

Предполагая, что вы поместите свои данные в список или кортеж. Возможно, функция генератора?

#Create generator function 
def Generator(): 
    data=['line1','line2','line3','line4']: 
    for i in data: 
     yield i  
output=Generator() #reference it 
....... 
...... 

if [time conditions is true]: 
    file-open("myfile","a") 
    file.write(str(next(output)) 
else: 
    [Do something] 

Вы также можете использовать попытаться захватить исключение и перезагрузить основной функцией

try: 
    MainFunction() #main function with generator next calls 
except [you error Error]: 
    MainFunction() #restart main function 
+0

Когда я достигаю таймаут кондиционировать весь мой код должен быть прекращен (либо принудительно, или я сделаю это сам после некоторой очистки). Как я узнаю, где я остановился, когда я перезапущу? –

+0

«насильственно» .... я вижу..почему не захватить исключение и перезапустить главную функцию? – repzero

+0

Код отправляется командным файлом, и когда он набирает время ожидания, этот экземпляр интерпретатора python завершается. Единственный способ перезапустить последний прогон - записать информацию на жесткий диск и прочитать ее снова во время нового задания. Захват исключений в функции более высокого уровня невозможен. –

Смежные вопросы