Skip to content

Commit

Permalink
make iterating over sys.modules (more) threadsafe (cloudpipe#322)
Browse files Browse the repository at this point in the history
  • Loading branch information
mmohrhard authored and ogrisel committed Jan 21, 2020
1 parent 8cf9ec4 commit c3982ea
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
4 changes: 4 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
1.2.3
=====

- Fix a bug when a thread imports a module while cloudpickle iterates
over the module list
([PR #322](https://github.com/cloudpipe/cloudpickle/pull/322)).

1.2.2
=====

Expand Down
7 changes: 4 additions & 3 deletions cloudpickle/cloudpickle.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,10 @@ def _whichmodule(obj, name):
module_name = getattr(obj, '__module__', None)
if module_name is not None:
return module_name
# 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()):
# Protect the iteration by using a copy of sys.modules against dynamic
# modules that trigger imports of other modules upon calls to getattr or
# other threads importing at the same time.
for module_name, module in sys.modules.copy().items():
if module_name == '__main__' or module is None:
continue
try:
Expand Down

0 comments on commit c3982ea

Please sign in to comment.