#22017: RuntimeError: dictionary changed size during iteration
-------------------------------+-------------------------
     Reporter:  quinox         |      Owner:  nobody
         Type:  Uncategorized  |     Status:  new
    Component:  Uncategorized  |    Version:  1.7-alpha-1
     Severity:  Normal         |   Keywords:
 Triage Stage:  Unreviewed     |  Has patch:  1
Easy pickings:  0              |      UI/UX:  0
-------------------------------+-------------------------
 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:
 {{{
 #!bash
 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:
 {{{
 #!python
 filenames = [filename.__file__ for filename in sys.modules.values()
             if hasattr(filename, '__file__')]
 }}}
 to
 {{{
 #!python
 filenames = [filename.__file__ for filename in list(sys.modules.values())
             if hasattr(filename, '__file__')]
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/22017>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.5c4da0f4656c36d4c608b60ee06aec67%40djangoproject.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to