Kaydet (Commit) a33e11e4 authored tarafından Brett Cannon's avatar Brett Cannon

Issue #17314: Stop using imp in multiprocessing.forking and move over

to importlib.
üst 22c039bf
...@@ -450,6 +450,7 @@ def prepare(data): ...@@ -450,6 +450,7 @@ def prepare(data):
# Main modules not actually called __main__.py may # Main modules not actually called __main__.py may
# contain additional code that should still be executed # contain additional code that should still be executed
import imp import imp
import importlib
if main_path is None: if main_path is None:
dirs = None dirs = None
...@@ -460,16 +461,17 @@ def prepare(data): ...@@ -460,16 +461,17 @@ def prepare(data):
assert main_name not in sys.modules, main_name assert main_name not in sys.modules, main_name
sys.modules.pop('__mp_main__', None) 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: try:
# We should not do 'imp.load_module("__main__", ...)' loader.init_module_attrs(main_module)
# since that would execute 'if __name__ == "__main__"' except AttributeError: # init_module_attrs is optional
# clauses, potentially causing a psuedo fork bomb. pass
main_module = imp.load_module( main_module.__name__ = '__mp_main__'
'__mp_main__', file, path_name, etc code = loader.get_code(main_name)
) exec(code, main_module.__dict__)
finally:
if file:
file.close()
sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module
...@@ -112,6 +112,8 @@ Core and Builtins ...@@ -112,6 +112,8 @@ Core and Builtins
Library Library
------- -------
- Issue #17314: Move multiprocessing.forking over to importlib.
- Issue #11959: SMTPServer and SMTPChannel now take an optional map, use of - Issue #11959: SMTPServer and SMTPChannel now take an optional map, use of
which avoids affecting global state. which avoids affecting global state.
......
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