]> granicus.if.org Git - python/commitdiff
Issue #15881: Clarify comment in exit function
authorRichard Oudkerk <shibturn@gmail.com>
Thu, 13 Sep 2012 16:27:15 +0000 (17:27 +0100)
committerRichard Oudkerk <shibturn@gmail.com>
Thu, 13 Sep 2012 16:27:15 +0000 (17:27 +0100)
Lib/multiprocessing/util.py

index 3bb954670fcf57b8b6dce40cf0cf792e718373eb..7495813c9a8dab378cd86e7f4c8ce345432570bd 100644 (file)
@@ -290,14 +290,17 @@ def _exit_function(info=info, debug=debug, _run_finalizers=_run_finalizers,
 
         if current_process() is not None:
             # We check if the current process is None here because if
-            # it's None, any call to ``active_children()`` will throw an
-            # AttributeError (active_children winds up trying to get
-            # attributes from util._current_process).  This happens in a
-            # variety of shutdown circumstances that are not well-understood
-            # because module-scope variables are not apparently supposed to
-            # be destroyed until after this function is called.  However,
-            # they are indeed destroyed before this function is called.  See
-            # issues #9775 and #15881.  Also related: #4106, #9205, and #9207.
+            # it's None, any call to ``active_children()`` will throw
+            # an AttributeError (active_children winds up trying to
+            # get attributes from util._current_process).  One
+            # situation where this can happen is if someone has
+            # manipulated sys.modules, causing this module to be
+            # garbage collected.  The destructor for the module type
+            # then replaces all values in the module dict with None.
+            # For instance, after setuptools runs a test it replaces
+            # sys.modules with a copy created earlier.  See issues
+            # #9775 and #15881.  Also related: #4106, #9205, and
+            # #9207.
 
             for p in active_children():
                 if p._daemonic: