]> granicus.if.org Git - python/commitdiff
Issue #17314: Stop using imp in multiprocessing.forking and move over
authorBrett Cannon <brett@python.org>
Fri, 7 Jun 2013 15:45:41 +0000 (11:45 -0400)
committerBrett Cannon <brett@python.org>
Fri, 7 Jun 2013 15:45:41 +0000 (11:45 -0400)
to importlib.

Lib/multiprocessing/forking.py
Misc/NEWS

index 37c9a10e7cc97ff2fc21c43c722102cdfe498fbd..54c073dc17c5b4a21064afc761839039f84c799e 100644 (file)
@@ -450,6 +450,7 @@ def prepare(data):
             # Main modules not actually called __main__.py may
             # contain additional code that should still be executed
             import imp
+            import importlib
 
             if main_path is None:
                 dirs = None
@@ -460,16 +461,17 @@ def prepare(data):
 
             assert main_name not in sys.modules, main_name
             sys.modules.pop('__mp_main__', None)
-            file, path_name, etc = imp.find_module(main_name, dirs)
+            # We should not try to load __main__
+            # since that would execute 'if __name__ == "__main__"'
+            # clauses, potentially causing a psuedo fork bomb.
+            loader = importlib.find_loader(main_name, path=dirs)
+            main_module = imp.new_module(main_name)
             try:
-                # We should not do 'imp.load_module("__main__", ...)'
-                # since that would execute 'if __name__ == "__main__"'
-                # clauses, potentially causing a psuedo fork bomb.
-                main_module = imp.load_module(
-                    '__mp_main__', file, path_name, etc
-                    )
-            finally:
-                if file:
-                    file.close()
+                loader.init_module_attrs(main_module)
+            except AttributeError:  # init_module_attrs is optional
+                pass
+            main_module.__name__ = '__mp_main__'
+            code = loader.get_code(main_name)
+            exec(code, main_module.__dict__)
 
             sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module
index 84e913742db697b470122be50fdec798053f73e7..df92935748041288a00f6e643d7c435c68c77ecd 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -112,6 +112,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #17314: Move multiprocessing.forking over to importlib.
+
 - Issue #11959: SMTPServer and SMTPChannel now take an optional map, use of
   which avoids affecting global state.