[issue30441] os.environ raises RuntimeError: dictionary changed size during iteration

Osvaldo Santana Neto report at bugs.python.org
Tue May 23 10:35:50 EDT 2017


New submission from Osvaldo Santana Neto:

We're facing ocasional RuntimeError exceptions in a multithreaded application when one of the threads creates new entries to the environment (os.environ).

I'm not so sure if the attached patch fixes this issue the right way, so, feel free to propose another approach.

Traceback Sample of the issue in our production environment:


RuntimeError: dictionary changed size during iteration
  File "python3.5/runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "python3.5/runpy.py", line 85, in _run_code
    exec(code, run_globals)


  [ internal code ]


  File "newrelic/api/background_task.py", line 103, in wrapper
    return wrapped(*args, **kwargs)
  File "python3.5/contextlib.py", line 30, in inner
    return func(*args, **kwds)
  File "python3.5/contextlib.py", line 77, in __exit__
    self.gen.throw(type, value, traceback)
  File "raven/base.py", line 851, in make_decorator
    yield
  File "python3.5/contextlib.py", line 30, in inner
    return func(*args, **kwds)
  

  [ internal code ]


  File "retry/api.py", line 74, in retry_decorator
    logger)
  File "retry/api.py", line 33, in __retry_internal
    return f()


  [ internal code ]


  File "requests/sessions.py", line 531, in get
    return self.request('GET', url, **kwargs)
  File "requests/sessions.py", line 509, in request
    prep.url, proxies, stream, verify, cert
  File "requests/sessions.py", line 686, in merge_environment_settings
    env_proxies = get_environ_proxies(url, no_proxy=no_proxy)
  File "requests/utils.py", line 696, in get_environ_proxies
    return getproxies()
  File "urllib/request.py", line 2393, in getproxies_environment
    for name, value in os.environ.items():
  File "_collections_abc.py", line 676, in __iter__
    for key in self._mapping:
  File "python3.5/os.py", line 702, in __iter__
    for key in self._data:

----------
components: Library (Lib)
files: fix_os_environ_iteration_issue.diff
keywords: patch
messages: 294250
nosy: osantana
priority: normal
severity: normal
status: open
title: os.environ raises RuntimeError: dictionary changed size during iteration
type: behavior
versions: Python 3.5, Python 3.6
Added file: http://bugs.python.org/file46889/fix_os_environ_iteration_issue.diff

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30441>
_______________________________________


More information about the Python-bugs-list mailing list