Допустим мы имеем очень примитивный код, вроде:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import signal
import sys
from time import sleep
def signal_handler(sig, frame):
print('You pressed Ctrl+C!')
print(a)
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
a = 0
while True:
a += 1
sleep(2)
a += 1
print(a)
Теперь я хочу в signal_handler сохранять состояние программы, для того чтобы не усложнять пример буду просто печатать a (хотя я не уверен что то как это сделано правильно). Понятно, что состояние когда a - нечётное число некорректно. Т.е. цикл надо досчитывать до конца. Вопрос в том, как это сделать наименее уродски. Да, отлавливать в цикле Ctrl+C нельзя, так как убивать может и мой скрипт на выключение компа, который гарантированно дождётся корректного завершения программы, работающей в фоне.
Конечно можно обмазаться каким-нибудь atomicloop, но боюсь это быдлокод будет в общем случае. Надо понять как это делать правильнее.