#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
-------------------------------------+-------------------------------------
Changes (by s2krish):

 * needs_docs:   => 0
 * needs_better_patch:   => 0
 * needs_tests:   => 0


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 locking 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 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:1>
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.e096b529017a872849721ce3e724fc11%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to