atexit — Обработчики завершения
Новое в версии 2.0.
Исходный код: Lib/atexit.py
Модуль atexit определяет единственную функцию для регистрации функций очистки. Функции, зарегистрированные таким образом, автоматически выполняются при нормальном завершении интерпретатора. atexit выполняет эти функции в обратном порядке их регистрации; если вы регистрируете A, B, и C, во время завершения интерпретатора они будут выполнены в порядке C, B, A.
Примечание: Функции, зарегистрированные с помощью этого модуля, не вызываются, когда программа убивается сигналом, не обрабатываемым Python, когда обнаружена внутренняя ошибка Python, или когда вызывается os._exit().
Это альтернативный интерфейс к функциональности, предоставляемой переменной sys.exitfunc().
Примечание: Этот модуль, вероятно, не будет работать правильно, когда используется с другими кодами, которые устанавливают sys.exitfunc. В частности, другие основные модули Python могут свободно использовать atexit без ведома программиста. Авторы, которые используют sys.exitfunc должны преобразовать свой код для использования atexit вместо этого. Самый простой способ преобразовать код, который устанавливает sys.exitfunc — это импортировать atexit и зарегистрировать функцию, которая была связана с sys.exitfunc.
-
atexit.register(func[, *args[, **kwargs]]) -
Зарегистрировать func в качестве функции, которая должна быть выполнена при завершении. Любые необязательные аргументы, которые должны быть переданы в func, должны быть переданы в качестве аргументов в
register(). Возможно зарегистрировать одну и ту же функцию и аргументы более одного раза.При нормальном завершении программы (например, если вызвана
sys.exit()или завершается выполнение главного модуля), все зарегистрированные функции вызываются в порядке «последний в, первый из». Предполагается, что модули более низкого уровня обычно импортируются перед модулями более высокого уровня, и поэтому их необходимо очищать позже.Если во время выполнения обработчиков завершения возникает исключение, выводится трассировка (если не возникает
SystemExit) и информация об исключении сохраняется. После того, как все обработчики завершения будут иметь возможность выполнить своё действие, последнее возникшее исключение повторно возбуждается.Изменено в версии 2.6: Эта функция теперь возвращает func, что позволяет использовать её как декоратор.
См. также
1. Пример atexit
Следующий простой пример демонстрирует, как модуль может инициализировать счётчик из файла при импорте и автоматически сохранять обновленное значение счётчика при завершении программы, не полагаясь на приложение, делающее явное обращение к этому модулю при завершении.
try:
_count = int(open("counter").read())
except IOError:
_count = 0
def incrcounter(n):
global _count
_count = _count + n
def savecounter():
open("counter", "w").write("%d" % _count)
import atexit
atexit.register(savecounter)
Позиционные и ключевые аргументы также могут быть переданы в register() для передачи в зарегистрированную функцию при ее вызове:
def goodbye(name, adjective):
print 'Goodbye, %s, it was %s to meet you.' % (name, adjective)
import atexit
atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
Использование как декоратора:
import atexit
@atexit.register
def goodbye():
print "You are now leaving the Python sector."
Это работает только с функциями, которые могут вызываться без аргументов.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/atexit.html