Python Glossary English

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Сообщить о неточности