#22017 closed Bug (fixed)
RuntimeError: dictionary changed size during iteration
Reported by: | Ceesjan Luiten | Owned by: | nobody |
---|---|---|---|
Component: | Python 3 | Version: | 1.7-alpha-1 |
Severity: | Normal | Keywords: | |
Cc: | djangoproject.com@… | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description
This bug report is identical to #21049 but for Django 1.7.
I run Django 1.7a2 with a Python3 virtualenv. Occasionally the runserver crashes with the following stacktrace:
System check identified no issues (0 silenced). Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/core/management/__init__.py", line 427, in execute_from_command_line utility.execute() File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/core/management/__init__.py", line 419, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/core/management/base.py", line 287, in run_from_argv self.execute(*args, **options.__dict__) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/core/management/base.py", line 336, in execute output = self.handle(*args, **options) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/core/management/commands/runserver.py", line 81, in handle self.run(*args, **options) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/core/management/commands/runserver.py", line 90, in run autoreload.main(self.inner_run, args, options) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 267, in main reloader(wrapped_main_func, args, kwargs) File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 233, in python_reloader reloader_thread() File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 212, in reloader_thread if fn(): File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 139, in inotify_code_changed update_watch() File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 132, in update_watch for path in gen_filenames(): File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 84, in gen_filenames filenames = [filename.__file__ for filename in sys.modules.values() File "/home/quinox/projecten/deadlines/virtual/lib/python3.3/site-packages/django/utils/autoreload.py", line 84, in <listcomp> filenames = [filename.__file__ for filename in sys.modules.values() RuntimeError: dictionary changed size during iteration
The issue shows up sporadically, it can usually be triggered within 10 minutes by running the following command in a shell:
while true ; do touch project/xxx/models.py ; sleep 1s; done
The fix as suggested in #21049 seems to fix the issue, I haven't seen the runserver crash since I modified django/utils/autoreload.py
lines 84-85 from:
filenames = [filename.__file__ for filename in sys.modules.values() if hasattr(filename, '__file__')]
to
filenames = [filename.__file__ for filename in list(sys.modules.values()) if hasattr(filename, '__file__')]
Change History (4)
comment:1 by , 11 years ago
Cc: | added |
---|---|
Component: | Uncategorized → Python 3 |
Type: | Uncategorized → Bug |
comment:2 by , 11 years ago
Easy pickings: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:3 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Regression was introduced in 15f82c701161b327cef54b469c00b6cbe01534db.