The sys
module have a function called is_finalizing
. Running help(sys.is_finalizing)
will result in
>>> help(sys.is_finalizing)
Help on built-in function is_finalizing in module sys:
is_finalizing()
Return True if Python is exiting.
What is mean by Python is exiting? The [documentation(https://docs.python.org/3/library/sys.html#sys.is_finalizing) says this,
sys.is_finalizing()
ReturnTrue
if the Python interpreter is shutting down,False
otherwise
I am quite not understand what Python interpreter is shutting down means. Does it mean during the exit
function call, If yes what's the point of sys.is_finalizing()
as it always return False
?. I am trying to understand in which scenario sys.is_finalizing
return True
and in which situation this API is useful?
CodePudding user response:
It's not something most users would ever need, but is_finalizing()
will be True
while the interpreter is shutting down, when it's destroying objects, releasing memory, etc. Knowing that the interpreter is shutting down when an object's __del__()
method is called might let the object decide to take certain actions, or not.
As a quick display in an interactive session:
>>> import sys
>>> class X:
... def __del__(self):
... print(f"__del__: is_finalizing = {sys.is_finalizing()}")
...
>>> x = X()
>>> del x
__del__: is_finalizing = False
>>>
>>> x = X()
>>> sys.is_finalizing()
False
>>> exit()
__del__: is_finalizing = True
Note that, per the Python Data Model, there's no guarantee __del__()
will be called:
It is not guaranteed that
__del__()
methods are called for objects that still exist when the interpreter exits.
(For completeness, note that the example happens to show the object getting deleted immediately as a result of the name being removed with del x
, but that behavior is not guaranteed either.)