Модуль atexit
определяет функции для регистрации и отмены регистрации функций очистки. Зарегистрированные таким образом функции автоматически выполняются после обычного завершения интерпретатора.
Модуль atexit
запускает эти функции в обратном порядке, в котором они были зарегистрированы. Если вы зарегистрируете A
, B
и C
, во время завершения работы программы они будут выполняться в порядке C
, B
, A
.
Примечание: функции, зарегистрированные через этот модуль, не вызываются, когда программа прерывается сигналом, не обработанным Python, когда обнаружена фатальная внутренняя ошибка Python или когда вызывается os._exit()
.
Пример демонстрирует, как модуль может инициализировать счетчик из файла, когда он импортируется и автоматически сохранять обновленное значение счетчика, когда программа завершает работу, не полагаясь на то, что приложение делает явный вызов в этот модуль при завершении.
import atexit try: with open("counterfile") as infile: _count = int(infile.read()) except FileNotFoundError: _count = 0 def incrcounter(n): global _count _count = _count + n def savecounter(): with open("counterfile", "w") as outfile: outfile.write("%d" % _count) import atexit atexit.register(savecounter)
Позиционные и ключевые аргументы также могут быть переданы в atexit.register()
для передачи зарегистрированной функции при ее вызове:
def goodbye(name, adjective): print('Goodbye, %s, it was %s to meet you.' % (name, adjective)) import atexit atexit.register(goodbye, 'Donny', 'nice') # или atexit.register(goodbye, adjective='nice', name='Donny')
Использование в качестве декоратора.
import atexit @atexit.register def goodbye(): print("You are now leaving the Python sector.")
функция atexit.register()
в качестве декоратора работает только с функциями, которые можно вызывать без аргументов.