Python 3.5+sysфункция
sys.is_finalizing()
интерпретатор
Возвращает True, когда интерпретатор уже завершается. Нужна в __del__ и фоновых потоках, чтобы не трогать полуразобранные модули.
Синтаксис
sys.is_finalizing()
Во время завершения глобальные имена модулей могут быть уже очищены, и __del__ падает с непонятными ошибками вроде «'NoneType' object is not callable». Проверка sys.is_finalizing() позволяет пропустить уборку. Неочевидно, что в обработчиках atexit она ещё False — они работают до начала финализации.
Примеры
import atexit, sys
class Resource:
def __del__(self):
print('при выходе' if sys.is_finalizing() else 'обычное удаление')
r = Resource()
del r
keep = Resource()
atexit.register(lambda: print('atexit:', sys.is_finalizing()))
print(sys.is_finalizing()) # → False
# → обычное удаление / False / atexit: False / при выходе
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности