История изменений
Исправление peregrine, (текущая версия) :
Понял уже. Жаль что очень удобно обработку в одном месте не получится сделать. Будет разорванная логика. С учётом всего в треде выходит что-то вроде:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import signal
import os
from time import sleep
class PerfectKiller:
kill_now = False
def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
self.signal = None
def exit_gracefully(self, signum, frame):
self.signal = signum
self.kill_now = True
def perfect_exit(self):
if self.signal is not None:
signal.signal(self.signal, signal.SIG_DFL)
os.kill(os.getpid(), self.signal)
print('Press Ctrl+C')
a = 0
killer = PerfectKiller()
while not killer.kill_now:
a += 1
sleep(2)
a += 1
print(a)
print(f'типо сохранение {a}')
killer.perfect_exit()
Исходная версия peregrine, :
Понял уже. Жаль что очень удобно обработку в одном месте не получится сделать. Будет разорванная логика. С учётом всего в треде выходит что-то вроде:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import signal
import os
from time import sleep
class PerfectKiller:
kill_now = False
def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
self.signal = None
def exit_gracefully(self, signum, frame):
self.signal = signum
self.kill_now = True
def perfect_exit(self):
if self.signal is not None:
signal.signal(self.signal, signal.SIG_DFL)
os.kill(os.getpid(), self.signal)
print('Press Ctrl+C')
a = 0
killer = PerfectKiller()
while not killer.kill_now:
a += 1
sleep(2)
a += 1
print(a)
print(f'типо сохранение {a}')
killer.perfect_exit()