#24574: 'python manage.py runserver' sleeps forever because of threading lock
-------------------------------------+-------------------------------------
Reporter: s2krish | Owner: nobody
Type: Bug | Status: new
Component: Migrations | Version: 1.7
Severity: Normal | Resolution:
Keywords: threading lock, | Triage Stage:
manage.py | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by s2krish:
Old description:
> I have upgraded Django 1.6 o 1.7.7. I was run my project using 'python
> manage.py runserver' command. It went well in test server. However, when
> I tried same in production server, it sleeps forever. Detail Server info
> is attached below. Doing trackback, I figure out problem, It lies on
> django.apps.registry.populate function. Trace back steps as follows:
>
> 1. Command line execution starts.
> {{{#!python
> django.core.management:: utility.execute()
> }}}
>
> 2. It calls application setup process, where it loads enabled Apps
> {{{#!python
> django.core.management ::jango.setup()
> django.setup:: apps.populate(settings.INSTALLED_APPS)
> }}}
>
> 3. Thread starts threading lock process, so that same application not
> loaded twice.
> {{{#!python
> django.apps.registry::with self._lock:
> }}}
>
> 4. It goes through for each app,
> {{{#!python
> django.apps.registry::app_config.ready()
> ...
> # after many lines of codes
> ...
> for app_config in self.get_app_configs():
> app_config.ready()
> }}}
> 5. When it matches <AdminConfig: admin>, it calls to
> {{{#!python
> django.contrib.admin.apps:: self.module.autodiscover()
> django.contrib.admin:: autodiscover_modules('admin', register_to=site)
> }}}
> 56. autodiscover_modules agains calls django.setup(). I don't have full
> traceback. But it goes like:
> {{{#!python
> django.core.management ::django.setup()
> }}}
> {{{#!python
> django.setup::apps.populate(settings.INSTALLED_APPS)
> }}}
> {{{#!python
> django.apps.registry::with self._lock:
> }}}
>
> Application stuck here in django.apps.registry::with self._lock: line
> because the threading lock has been already acquired and not released.
>
> '''Python:'''
> Python 2.7.6 on both server
>
> '''Dev Server:'''
> Distributor ID: Ubuntu
> Description: Ubuntu 14.04.1 LTS
> Release: 14.04
> Codename: trusty
> CPU: 2.40GHz x 1
> MemTotal: 1017880kb
>
> '''Production Server:'''
> Distributor ID: Ubuntu
> Description: Ubuntu 14.04 LTS
> Release: 14.04
> Codename: trusty
> CPU: 2.00GHz x 24
> MemTotal: 4942810
New description:
I have upgraded Django 1.6 o 1.7.7. I was run my project using 'python
manage.py runserver' command. It went well in test server. However, when I
tried same in production server, it sleeps forever. Detail Server info is
attached below. Doing trackback, I figure out problem, It lies on
django.apps.registry.populate function. Trace back steps as follows:
1. Command line execution starts.
{{{#!python
django.core.management:: utility.execute()
}}}
2. It calls application setup process, where it loads enabled Apps
{{{#!python
django.core.management ::jango.setup()
django.setup:: apps.populate(settings.INSTALLED_APPS)
}}}
3. Thread starts threading lock process, so that same application not
loaded twice.
{{{#!python
django.apps.registry::with self._lock:
}}}
4. It goes through for each app,
{{{#!python
django.apps.registry::app_config.ready()
...
# after many lines of codes
...
for app_config in self.get_app_configs():
app_config.ready()
}}}
5. When it matches <AdminConfig: admin>, it calls to
{{{#!python
django.contrib.admin.apps:: self.module.autodiscover()
django.contrib.admin:: autodiscover_modules('admin', register_to=site)
}}}
56. autodiscover_modules agains calls django.setup(). I don't have full
traceback. But it goes like:
{{{#!python
django.core.management ::django.setup()
}}}
{{{#!python
django.setup::apps.populate(settings.INSTALLED_APPS)
}}}
{{{#!python
django.apps.registry::with self._lock:
}}}
Application stuck here in django.apps.registry::with self._lock: line
because the threading lock has been already acquired and not released.
'''Python:'''
Python 2.7.6 on both server
'''Dev Server:'''
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
CPU: 2.40GHz x 1
MemTotal: 1017880kb
'''Production Server:'''
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty
CPU: 2.00GHz x 24
MemTotal: 4942810
--
--
Ticket URL: <https://code.djangoproject.com/ticket/24574#comment:4>
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/065.f01d91e30b1aa3f26d8e488190e2cdd4%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.