This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Add a function to know about interpreter shutdown
Type: enhancement Stage: resolved
Components: Interpreter Core Versions: Python 3.5
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, pitrou, python-dev, serhiy.storchaka, vstinner
Priority: normal Keywords: patch

Created on 2014-10-22 12:20 by pitrou, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
is_finalizing.patch vstinner, 2014-10-22 12:32 review
traceback_ignore_linecache_error.patch vstinner, 2014-12-05 09:29 review
is_finalizing2.patch pitrou, 2014-12-05 18:18 review
Messages (16)
msg229817 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-10-22 12:20
I propose to add a new function sys.shutting_down() (name debatable) returning True if the interpreter is currently shutting down.

This would be a function so that you can bind it and avoid having it wiped at shutdown :-)
msg229818 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2014-10-22 12:32
For the issue #22599, I wrote a patch but then I removed my patch and reverted my changed...

Here is a new patch which implements why I already wrote: add a new sys._is_finalizing() function, with a unit test.

> I propose to add a new function sys.shutting_down() (name debatable)

The name sounds like a function to shut down the computer or exit Python.

I don't like _is_finalizing() name neither :-)

My patch uses a private function which is CPython specific. Does it make sense to add a public function instead? Is it possible to implement it in any Python implementation (PyPy, IronPython, Jython, etC.)? I guess that the most dummy implementation is to always return False (Python is always running.
msg229820 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-10-22 12:58
Are there other special interpreter states about which it would by helpful to 
know? Interpreter initializing, garbage collecting, signal handling?
msg229823 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-10-22 13:56
> My patch uses a private function which is CPython specific.
> Does it make sense to add a public function instead?

I would like it to be public. It can be useful in __del__ methods and the like.
msg229824 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-10-22 13:58
> Are there other special interpreter states about which it would by 
> helpful to know? Interpreter initializing, garbage collecting, signal 
> handling?

- interpreter initializing: user code generally isn't executed in that phase
- garbage collecting: there are already garbage collection callbacks
- signal handling: well... I don't see why that would be useful
msg231248 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-11-16 14:50
I'm +0 for is_finalizing.

There is a typo in the docstring.
msg231364 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-11-19 10:12
An indirect way how to know about interpreter shutdown -- test existing of the path attribute in sys (issue20603).
msg232178 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-12-05 07:44
After solving this issue we should reconsider the traceback_ignore_linecache_error.patch patch in issue22599.
msg232186 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2014-12-05 09:29
> After solving this issue we should reconsider the traceback_ignore_linecache_error.patch patch in issue22599.

I reposted the patch in this issue since I just closed the issue #22599.
msg232200 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-12-05 18:18
Here is a patch with docs.
msg232210 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2014-12-05 21:22
is_finalizing2.patch looks good to me.
msg232212 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-12-05 21:37
Before committing the patch it will be good to find places in the code which will benefit from this function.

And please don't forget to fix a typo in the docstring.
msg232218 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2014-12-05 22:03
> Before committing the patch it will be good to find places in the code which will benefit from this function.

The traceback and/or the linecache is a first good candidate to use this new function. We may patch more functions later if needed, I don't think that we need to address all issues right now.
msg232261 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2014-12-07 00:29
New changeset 7f3695701724 by Antoine Pitrou in branch 'default':
Issue #22696: Add function :func:`sys.is_finalizing` to know about interpreter shutdown.
https://hg.python.org/cpython/rev/7f3695701724
msg232262 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-12-07 00:30
Using the function in the stdlib can be done separately. I fixed the typo in the docstring. Thanks!
msg233494 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2015-01-06 00:34
> Using the function in the stdlib can be done separately.

Is there an open issue for that?
History
Date User Action Args
2022-04-11 14:58:09adminsetgithub: 66885
2015-01-06 00:34:40vstinnersetmessages: + msg233494
2014-12-07 03:38:36Arfreversetnosy: + Arfrever
2014-12-07 00:30:35pitrousetstatus: open -> closed
resolution: fixed
messages: + msg232262

stage: needs patch -> resolved
2014-12-07 00:29:54python-devsetnosy: + python-dev
messages: + msg232261
2014-12-05 22:03:53vstinnersetmessages: + msg232218
2014-12-05 21:37:46serhiy.storchakasetmessages: + msg232212
2014-12-05 21:22:56vstinnersetmessages: + msg232210
2014-12-05 18:19:00pitrousetfiles: + is_finalizing2.patch

messages: + msg232200
2014-12-05 09:29:15vstinnersetfiles: + traceback_ignore_linecache_error.patch

messages: + msg232186
2014-12-05 09:27:35vstinnerunlinkissue22599 dependencies
2014-12-05 07:44:22serhiy.storchakasetmessages: + msg232178
2014-11-19 10:12:17serhiy.storchakasetmessages: + msg231364
2014-11-16 14:50:07serhiy.storchakasetmessages: + msg231248
2014-11-16 14:45:37serhiy.storchakalinkissue22599 dependencies
2014-10-22 13:58:47pitrousetmessages: + msg229824
2014-10-22 13:56:42pitrousetmessages: + msg229823
2014-10-22 12:58:34serhiy.storchakasetmessages: + msg229820
2014-10-22 12:32:16vstinnersetfiles: + is_finalizing.patch
keywords: + patch
messages: + msg229818
2014-10-22 12:20:53pitroucreate