Я работаю со скриптом python, который записывает в файл несколько длинных sh строк текста. Для дальнейшей обработки важно, чтобы эти строки были либо полностью написаны, либо пропущены полностью. Откладывая в сторону возможные сбои, которые вряд ли могут сделать их достойными особого внимания в коде, я хотел бы сделать раздел записи «atomi c» * относительно сигналов SIGINT, чтобы, если мне нужно было остановить программу на в любой точке с помощью Ctrl + C у меня не будет частично написанных строк в файле.
Я нашел этот ответ , который заменяет обработчик сигнала. Я думал, что мог бы установить временный обработчик сигнала в начале «критической секции» (например, до file.write(my_long_text_line)
) и восстановить исходную в конце (плюс некоторую бухгалтерию для обработки SIGINT, полученных в критической секции), но это было бы много перестановочных обработчиков, поэтому мне было интересно, есть ли лучший способ добиться этого.
*: "atomi c", означающий "Если я отправлю SIGINT, находясь внутри этого раздела, сигнал будет обработан после завершения раздела кода ", меня не интересуют проблемы, связанные с параллелизмом.