Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
5db1bb81
Commit
5db1bb81
authored
Dec 07, 2014
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #22696: Add function :func:`sys.is_finalizing` to know about interpreter shutdown.
parent
b9859dae
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
62 additions
and
6 deletions
+62
-6
Doc/glossary.rst
Doc/glossary.rst
+13
-0
Doc/library/gc.rst
Doc/library/gc.rst
+3
-3
Doc/library/sys.rst
Doc/library/sys.rst
+8
-0
Doc/library/weakref.rst
Doc/library/weakref.rst
+3
-3
Lib/test/test_sys.py
Lib/test/test_sys.py
+21
-0
Misc/NEWS
Misc/NEWS
+3
-0
Python/sysmodule.c
Python/sysmodule.c
+11
-0
No files found.
Doc/glossary.rst
View file @
5db1bb81
...
...
@@ -402,6 +402,19 @@ Glossary
than
compiled
ones
,
though
their
programs
generally
also
run
more
slowly
.
See
also
:
term
:`
interactive
`.
interpreter
shutdown
When
asked
to
shut
down
,
the
Python
interpreter
enters
a
special
phase
where
it
gradually
releases
all
allocated
resources
,
such
as
modules
and
various
critical
internal
structures
.
It
also
makes
several
calls
to
the
:
term
:`
garbage
collector
<
garbage
collection
>`.
This
can
trigger
the
execution
of
code
in
user
-
defined
destructors
or
weakref
callbacks
.
Code
executed
during
the
shutdown
phase
can
encounter
various
exceptions
as
the
resources
it
relies
on
may
not
function
anymore
(
common
examples
are
library
modules
or
the
warnings
machinery
).
The
main
reason
for
interpreter
shutdown
is
that
the
``
__main__
``
module
or
the
script
being
run
has
finished
executing
.
iterable
An
object
capable
of
returning
its
members
one
at
a
time
.
Examples
of
iterables
include
all
sequence
types
(
such
as
:
class
:`
list
`,
:
class
:`
str
`,
...
...
Doc/library/gc.rst
View file @
5db1bb81
...
...
@@ -186,7 +186,7 @@ values but should not rebind them):
added to this list rather than freed.
.. versionchanged:: 3.2
If this list is non-empty at
interpreter shutdown
, a
If this list is non-empty at
:term:`interpreter shutdown`
, a
:exc:`ResourceWarning` is emitted, which is silent by default. If
:const:`DEBUG_UNCOLLECTABLE` is set, in addition all uncollectable objects
are printed.
...
...
@@ -252,8 +252,8 @@ The following constants are provided for use with :func:`set_debug`:
to the ``garbage`` list.
.. versionchanged:: 3.2
Also print the contents of the :data:`garbage` list at
interpreter
shutdown
, if it isn't empty.
Also print the contents of the :data:`garbage` list at
:term:`interpreter shutdown`
, if it isn't empty.
.. data:: DEBUG_SAVEALL
...
...
Doc/library/sys.rst
View file @
5db1bb81
...
...
@@ -718,6 +718,14 @@ always available.
value of :func:`intern` around to benefit from it.
.. function:: is_finalizing()
Return :const:`True` if the Python interpreter is
:term:`shutting down <interpreter shutdown>`, :const:`False` otherwise.
.. versionadded:: 3.5
.. data:: last_type
last_value
last_traceback
...
...
Doc/library/weakref.rst
View file @
5db1bb81
...
...
@@ -258,7 +258,7 @@ These method have the same issues as the and :meth:`keyrefs` method of
are called in reverse order of creation.
A finalizer will never invoke its callback during the later part of
the
interpreter shutdown
when module globals are liable to have
the
:term:`interpreter shutdown`
when module globals are liable to have
been replaced by :const:`None`.
.. method:: __call__()
...
...
@@ -527,8 +527,8 @@ follows::
Starting with Python 3.4, :meth:`__del__` methods no longer prevent
reference cycles from being garbage collected, and module globals are
no longer forced to :const:`None` during
interpreter shutdown. So this
code should work without any issues on CPython.
no longer forced to :const:`None` during
:term:`interpreter shutdown`.
So this
code should work without any issues on CPython.
However, handling of :meth:`__del__` methods is notoriously implementation
specific, since it depends on internal details of the interpreter's garbage
...
...
Lib/test/test_sys.py
View file @
5db1bb81
...
...
@@ -744,6 +744,27 @@ class SysModuleTest(unittest.TestCase):
c
=
sys
.
getallocatedblocks
()
self
.
assertIn
(
c
,
range
(
b
-
50
,
b
+
50
))
def
test_is_finalizing
(
self
):
self
.
assertIs
(
sys
.
is_finalizing
(),
False
)
# Don't use the atexit module because _Py_Finalizing is only set
# after calling atexit callbacks
code
=
"""if 1:
import sys
class AtExit:
is_finalizing = sys.is_finalizing
print = print
def __del__(self):
self.print(self.is_finalizing(), flush=True)
# Keep a reference in the __main__ module namespace, so the
# AtExit destructor will be called at Python exit
ref = AtExit()
"""
rc
,
stdout
,
stderr
=
assert_python_ok
(
'-c'
,
code
)
self
.
assertEqual
(
stdout
.
rstrip
(),
b'True'
)
@
test
.
support
.
cpython_only
class
SizeofTest
(
unittest
.
TestCase
):
...
...
Misc/NEWS
View file @
5db1bb81
...
...
@@ -194,6 +194,9 @@ Core and Builtins
Library
-------
-
Issue
#
22696
:
Add
function
:
func
:`
sys
.
is_finalizing
`
to
know
about
interpreter
shutdown
.
-
Issue
#
16043
:
Add
a
default
limit
for
the
amount
of
data
xmlrpclib
.
gzip_decode
will
return
.
This
resolves
CVE
-
2013
-
1753.
...
...
Python/sysmodule.c
View file @
5db1bb81
...
...
@@ -1121,6 +1121,16 @@ PyDoc_STRVAR(sys_clear_type_cache__doc__,
"_clear_type_cache() -> None
\n
\
Clear the internal type lookup cache."
);
static
PyObject
*
sys_is_finalizing
(
PyObject
*
self
,
PyObject
*
args
)
{
return
PyBool_FromLong
(
_Py_Finalizing
!=
NULL
);
}
PyDoc_STRVAR
(
is_finalizing_doc
,
"is_finalizing()
\n
\
Return True if Python is exiting."
);
static
PyMethodDef
sys_methods
[]
=
{
/* Might as well keep this in alphabetic order */
...
...
@@ -1167,6 +1177,7 @@ static PyMethodDef sys_methods[] = {
getwindowsversion_doc
},
#endif
/* MS_WINDOWS */
{
"intern"
,
sys_intern
,
METH_VARARGS
,
intern_doc
},
{
"is_finalizing"
,
sys_is_finalizing
,
METH_NOARGS
,
is_finalizing_doc
},
#ifdef USE_MALLOPT
{
"mdebug"
,
sys_mdebug
,
METH_VARARGS
},
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment