Kaydet (Commit) 5f6a7556 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is…

Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated while iterating.

Patch by Olivier Grisel.
......@@ -280,7 +280,9 @@ def whichmodule(obj, name, allow_qualname=False):
module_name = getattr(obj, '__module__', None)
if module_name is not None:
return module_name
for module_name, module in sys.modules.items():
# Protect the iteration by using a list copy of sys.modules against dynamic
# modules that trigger imports of other modules upon calls to getattr.
for module_name, module in list(sys.modules.items()):
if module_name == '__main__' or module is None:
continue
try:
......
......@@ -498,6 +498,7 @@ Eddy De Greef
Grant Griffin
Andrea Griffini
Duncan Grisby
Olivier Grisel
Fabian Groffen
Eric Groo
Dag Gruneau
......
......@@ -162,6 +162,9 @@ Core and Builtins
Library
-------
- Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules
is mutated while iterating. Patch by Olivier Grisel.
- Issue #11271: concurrent.futures.Executor.map() now takes a *chunksize*
argument to allow batching of tasks in child processes and improve
performance of ProcessPoolExecutor. Patch by Dan O'Reilly.
......
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