Commit 3b265787 by Bruce Merry Committed by Jason Rhinelander

Document using atexit for module destructors on PyPy (#1169)

None of the three currently recommended approaches works on PyPy, due to
it not garbage collecting things when you want it to. Added a note with
example showing how to get interpreter shutdown callbacks using the Python
atexit module.
parent 086d53e8
...@@ -216,6 +216,21 @@ avoids this issue involves weak reference with a cleanup callback: ...@@ -216,6 +216,21 @@ avoids this issue involves weak reference with a cleanup callback:
// Create a weak reference with a cleanup callback and initially leak it // Create a weak reference with a cleanup callback and initially leak it
(void) py::weakref(m.attr("BaseClass"), cleanup_callback).release(); (void) py::weakref(m.attr("BaseClass"), cleanup_callback).release();
.. note::
PyPy (at least version 5.9) does not garbage collect objects when the
interpreter exits. An alternative approach (which also works on CPython) is to use
the :py:mod:`atexit` module [#f7]_, for example:
.. code-block:: cpp
auto atexit = py::module::import("atexit");
atexit.attr("register")(py::cpp_function([]() {
// perform cleanup here -- this function is called with the GIL held
}));
.. [#f7] https://docs.python.org/3/library/atexit.html
Generating documentation using Sphinx Generating documentation using Sphinx
===================================== =====================================
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment