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

to importlib.
This commit is contained in:
Brett Cannon 2013-06-07 11:45:41 -04:00
parent 22c039bf50
commit a33e11e436
2 changed files with 14 additions and 10 deletions

View 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

View File

@ -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.