Django deja de funcionar con RuntimeError: populate () no es reentrante

124

He estado desarrollando una aplicación web Django implementada en un servidor Apache con WSGI y todo ha ido bien. Hoy, hice algunos cambios menores en mi aplicación admin.pyen un intento de personalizar la interfaz de administración de Django incorporada, e inicialmente cometí un error de sintaxis (un paréntesis sin cerrar). Esto significó que cuando toqué wsgi.pyy cargué el código (tengo WSGI ejecutándose en modo demonio en mi host virtual), mi sitio web fue reemplazado por un Error de servidor interno porque WSGI se detuvo cuando encontró el error de sintaxis.

Así que arreglé el error de sintaxis, verifiqué que no tenía más con manage.py checky toqué wsgi.pypara volver a implementar. ¡Pero mi sitio web todavía muestra un error interno del servidor! Comprobando los registros de Apache, esto es lo que veo:

[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Create interpreter 'quotes.cs.cornell.edu|'.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/extra/www/html/quotes/quotes_django' to path.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/' to path.
[Sun Nov 23 13:52:46 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
  application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     application = get_wsgi_application()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     django.setup()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 115, in populate
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     app_config.ready()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/apps.py", line 22, in ready
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     self.module.autodiscover()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/__init__.py", line 23, in autodiscover
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     autodiscover_modules('admin', register_to=site)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/utils/module_loading.py", line 74, in autodiscover_modules
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     import_module('%s.%s' % (app_config.name,         
module_to_search))
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/usr/lib64/python2.7/importlib/__init__.py", line 
37, in import_module
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     __import__(name)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/quotespage/
admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     approve_quotes.short_description = "Approve selected
quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]                  ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax
[Sun Nov 23 13:53:36 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
  application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/         
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     application = get_wsgi_application()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     django.setup()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 78, in populate
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     raise RuntimeError("populate() isn't reentrant")
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] RuntimeError: populate() isn't reentrant

La primera serie de errores muestra que WSGI falla debido al error de sintaxis en my admin.py. Sin embargo, la segunda serie de errores parece mostrar un error interno de Django:

RuntimeError: populate() isn't reentrant

arrojado del populatemétodo de registry.py.

Buscar en Google este mensaje de error devuelve sorprendentemente poca información, nada de la documentación de Django. Aparentemente, a veces puede suceder si nombras una aplicación dos veces en tu settings.py, pero no estoy haciendo eso. Más importante aún, no he cambiado settings.pydesde el momento en que el sitio web funcionaba bien; lo único que cambié fue admin.py.

Intenté revertir todos los cambios que hice, por lo que todo mi código Python volvió al estado en el que estaba cuando el sitio web estaba funcionando, ¡y todavía obtengo el populate() isn't reentranterror cuando trato de hacer que WSGI vuelva a cargar el código!

También intenté comentar diferentes aplicaciones en la sección INSTALLED_APPS de settings.py, e incluso con solo 'django.contrib.staticfiles' habilitado, el error sigue ocurriendo. Extrañamente, sigo recibiendo el error incluso si comento todas las aplicaciones: ¡Django arroja el error incluso cuando no está cargando ninguna aplicación!

¿Alguien sabe lo que está pasando aquí? ¿O alguna forma mejor de depurar este error, ya que el rastreo en el registro de Apache es bastante inútil?

Notas: Estoy usando Django 1.7, Apache 2.2 y Python 2.7.

Eduardo
fuente
2
Intentaría eliminar todos los archivos .pyc que puedan existir.
dukebody
No, eliminar todos los archivos .pyc no ayudó. Tocar wsgi.pyda como resultado el mismo error de Apache y los archivos .pyc no se vuelven a crear.
Edward
1
¿Ha intentado reiniciar Apache?
dukebody
No puedo reiniciar Apache porque no tengo los derechos en este servidor. El administrador con acceso root no volverá a la oficina hasta el lunes.
Edward
En mi caso, no se instaló la aplicación de INSTALLED_APPS en el entorno.
maciek

Respuestas:

100

Esto es causado por un error en la configuración de Django en algún lugar. Desafortunadamente, Django está ocultando el error detrás de este mensaje de error genérico y no útil.

Para revelar el verdadero problema, abra django/apps/registry.pyy alrededor de la línea 80, reemplace:

raise RuntimeError("populate() isn't reentrant")

con:

self.app_configs = {}

Esto permitirá que Django continúe cargando y revele el error real.

Encontré este error por varias causas diferentes. Una vez fue porque tuve una mala importación en uno de los archivos admin.py de mi aplicación.

Cerin
fuente
22
Esta es, con mucho, la respuesta más útil en este hilo. Ahora lo sé ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA
2
Salvó mi vida. Esta solución me permitió verificar con éxito los requisitos faltantes y los errores de compatibilidad entre ellos.
Ángel Jiménez
1
Esto fue perfecto. Cambiar esa línea me dejó ver que tuve un simple error de importación. No podía decir qué estaba pasando antes de eso.
James
4
Esta respuesta es oro puro.
xpanta
2
@RickyA y este fue, con mucho, el comentario más útil, ya que ni siquiera tuve que molestarme con esta respuesta y simplemente lo intenté pip install --upgrade psycopg2y eso lo solucionó.
Usuario
65

El administrador de mi servidor reinició Apache y eso solucionó mágicamente este problema. Los mismos archivos de Python exactos cargados sin causar populate() isn't reentrant. Incluso intenté cargar otro archivo con un error de sintaxis, luego solucionarlo, y el servidor pudo cargar el nuevo archivo y ejecutarse correctamente sin problemas.

Todavía no sé qué estaba fallando, pero lo estoy marcando como respondido ya que el problema desapareció. (Bueno, lo marcaré como respondido tan pronto como StackOverflow me permita aceptar mi propia respuesta).

Actualización : después de continuar recibiendo este error cuando accidentalmente subo Python con errores de sintaxis, descubrí una solución que es más fácil que reiniciar Apache. Cuando WSGI comienza a lanzar el populate() isn't reentranterror, reemplazo mi proyecto Django wsgi.pycon esta función simple:

def application(environ, start_response):
    if environ['mod_wsgi.process_group'] != '': 
        import signal
        os.kill(os.getpid(), signal.SIGINT)
    return ["killed"]

Luego vuelvo a cargar mi sitio web y el proceso del demonio WSGI se reinicia (lo que puedo saber al mirar el registro de Apache, aunque el sitio web todavía muestra el mismo error 500).

Si luego wsgi.pyvuelvo a la normalidad y vuelvo a cargar, WSGI recoge correctamente mi código sin lanzar populate() isn't reentrant(suponiendo que esta vez no tenga errores de sintaxis). Entonces, no es necesario reiniciar Apache en su totalidad, solo el proceso WSGI, y puedo hacerlo sin privilegios de root.

Eduardo
fuente
8
Para mí, el problema no fue migrar los cambios que había realizado a un modelo en una de mis aplicaciones.
user2662692
Ok, estoy enfrentando casi el mismo problema y sí, se soluciona al reiniciar la máquina y reiniciar el servidor. Pero el problema se repite. A veces, de repente. dentro de un mes ha ocurrido tres veces. Si alguien tiene alguna idea, por favor ayude.
Rohit
@Rohit, si desea ayuda con su situación, probablemente debería publicar una nueva pregunta describiéndola. Es poco probable que obtenga una respuesta en los comentarios aquí.
Edward
4
Hay una startup-timeoutopción para el modo demonio de mod_wsgi en las versiones más recientes de mod_wsgi que ayuda a recuperarse de errores transitorios cuando se inicializa Django, como una base de datos que no está disponible. El tiempo de espera hará que el proceso se reinicie automáticamente si la aplicación WSGI no se carga correctamente después del período de tiempo de espera. Incluso eso no ayudará cuando tenga un problema permanente con su propio código. En ese caso, busque el primer error, no el populate()error, ya que le dará la verdadera razón por la que su código falla.
Graham Dumpleton
1
¿Qué quieres decir con "wsgi.py del proyecto Django con esta función simple"? ¿Cómo se reemplaza un archivo con una función?
Cerin
46

Sé que esta es una respuesta antigua, pero contribuiré con mi solución:

Como una forma de diagnosticar el origen del problema, ejecute manage.py checky vea si encuentra algo allí

En mi caso, un requisito obsoleto fue el problema y django no pudo importar un submódulo

Asegúrese de que sus requisitos estén actualizados

Jesús Gómez
fuente
2
Recibo el error 500 en Apache y no puedo encontrar el problema. Con este comando manage.py checkencontré el problema. Gracias.
Ali Hesari
13

No es una respuesta sino una reflexión.

Cuando actualiza a django 1.7 y tiene un error 500 y vuelve a cargar su página, Apache dice "populate () no es reentrante". Creo que es cuando cargas tu página, Apache carga todos los módulos que necesitas para tu aplicación y cuando se maneja el error no descarga el módulo. Entonces, cuando recarga su página, apache carga nuevamente estos módulos pero ya está cargado. Entonces, apache dice que "poblar () no es reentrante".

Tengo dos acciones para corregir esto: reiniciar Apache o corregir el error que maneja el primer error de 5OO.

Intente reiniciar apache con:

sudo service httpd restart

Espero que te ayude.

Vianney Thurotte
fuente
10

Si recibe este error al usar Google App Engine, verifique sus registros en busca de otros errores que puedan estar causando esto. Estuve obteniendo:

ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3

No puede usar SQLite con Google App Engine, por lo que comentar la DATABASESsección de settings.pydetuvo ese error y también el RuntimeError("populate() isn't reentrant")error.

donturner
fuente
Esto explica por qué todo funcionó bien a nivel local pero obtuvo un error de 500 cuando se implementó en GAE. Una pequeña pista: la búsqueda de texto "subir" en la página de registro de GAE generó un resultado exacto que llevó al mensaje de error señalado por donturner. Su solución me salvó el día :-)
Golden Thumb
2

Simplemente enfrenté el mismo problema, así que comencé a buscar.

Ahora lo tengo funcionando, ¡así que pensé que debería compartirlo con ustedes!

Todo lo que hice fue hacer una chown user:group /to/path -Ry chmod 770 /to/path -Rotra vez y funcionó.

Behzad
fuente
2

Esto parece una buena colección de respuestas válidas para el mismo error de Apache mod-wsgi, cada chico publica la que funciona para él / ella, así que aquí está la mía:

No olvide actualizar los requisitos de su proyecto después de la implementación :)

José L. Patiño
fuente
2

Experimenté este mismo problema, y ​​la fuente del error para mí fue solo un error de sintaxis en un archivo con el que estaba trabajando. Después de corregir el error tipográfico, el populate() is not reentranterror desapareció.

Si está ejecutando django desde un script wsgi, es posible que pueda identificar el error tipográfico simplemente ejecutando el script wsgi desde la línea de comandos. Por ejemplo:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi
Pedro
fuente
2

Este error también se genera si hay inconsistencia en el uso del espacio y tabulación en el código.

webbyfox
fuente
1

Configuración: Ubuntu 14.04, Django 1.10, Python 3.5 (in virtualenv).

Probé muchas de estas soluciones sin suerte, pero luego noté que el registro de errores de Apache contiene dos errores diferentes en mi caso. Uno que sucede cuando alguien intenta visitar una página, otro que sucede al inicio. Me perdí el de inicio porque generalmente intenté actualizar la página un par de veces y, por lo tanto, solo vi repetido el error de visita varias veces.

Luego busqué soluciones para el error de inicio y la solución a esta pregunta funcionó para mí . En resumen, implica actualizar el mod_wsgipaquete de forma indirecta.

Había estado recibiendo advertencias durante meses sobre la falta de coincidencia en las mod_wsgiversiones, pero de repente resultó en el error 500 de Apache. No tiene ningún sentido para mí.

Mi conjetura es que esto RuntimeError: populate() isn't reentrant error suele ser una señal de que uno debe buscar un error de inicio, que indica el problema real.

de visita

[Sat Oct 15 03:38:08.900966 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Target WSGI script '/django/GP/GP/wsgi.py' cannot be loaded as Python module.
[Sat Oct 15 03:38:08.901409 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Exception occurred processing WSGI script '/django/GP/GP/wsgi.py'.
[Sat Oct 15 03:38:08.901662 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] Traceback (most recent call last):
[Sat Oct 15 03:38:08.902184 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/GP/GP/wsgi.py", line 16, in <module>
[Sat Oct 15 03:38:08.902217 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     application = get_wsgi_application()
[Sat Oct 15 03:38:08.902501 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Sat Oct 15 03:38:08.902529 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     django.setup(set_prefix=False)
[Sat Oct 15 03:38:08.902726 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
[Sat Oct 15 03:38:08.902755 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     apps.populate(settings.INSTALLED_APPS)
[Sat Oct 15 03:38:08.902924 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/apps/registry.py", line 78, in populate
[Sat Oct 15 03:38:08.902953 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     raise RuntimeError("populate() isn't reentrant")
[Sat Oct 15 03:38:08.903111 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] RuntimeError: populate() isn't reentrant

puesta en marcha

[Sat Oct 15 03:38:08.900966 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Target WSGI script '/django/GP/GP/wsgi.py' cannot be loaded as Python module.
[Sat Oct 15 03:38:08.901409 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Exception occurred processing WSGI script '/django/GP/GP/wsgi.py'.
[Sat Oct 15 03:38:08.901662 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] Traceback (most recent call last):
[Sat Oct 15 03:38:08.902184 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/GP/GP/wsgi.py", line 16, in <module>
[Sat Oct 15 03:38:08.902217 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     application = get_wsgi_application()
[Sat Oct 15 03:38:08.902501 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Sat Oct 15 03:38:08.902529 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     django.setup(set_prefix=False)
[Sat Oct 15 03:38:08.902726 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
[Sat Oct 15 03:38:08.902755 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     apps.populate(settings.INSTALLED_APPS)
[Sat Oct 15 03:38:08.902924 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/apps/registry.py", line 78, in populate
[Sat Oct 15 03:38:08.902953 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     raise RuntimeError("populate() isn't reentrant")
[Sat Oct 15 03:38:08.903111 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] RuntimeError: populate() isn't reentrant
[Sat Oct 15 03:38:43.291502 2016] [:error] [pid 28272] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Sat Oct 15 03:38:43.291579 2016] [:error] [pid 28272] Traceback (most recent call last):
[Sat Oct 15 03:38:43.291604 2016] [:error] [pid 28272]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Sat Oct 15 03:38:43.292356 2016] [:error] [pid 28272]     assert tlock is not None
[Sat Oct 15 03:38:43.292377 2016] [:error] [pid 28272] AssertionError: 
[Fri Oct 14 23:38:43.412942 2016] [:error] [pid 28299] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.413044 2016] [:error] [pid 28299] Traceback (most recent call last):
[Fri Oct 14 23:38:43.413076 2016] [:error] [pid 28299]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.425037 2016] [:error] [pid 28275] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.425125 2016] [:error] [pid 28275] Traceback (most recent call last):
[Fri Oct 14 23:38:43.425157 2016] [:error] [pid 28275]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.427625 2016] [:error] [pid 28274] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.427694 2016] [:error] [pid 28274] Traceback (most recent call last):
[Fri Oct 14 23:38:43.427722 2016] [:error] [pid 28274]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.432020 2016] [:error] [pid 28273] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.432078 2016] [:error] [pid 28273] Traceback (most recent call last):
[Fri Oct 14 23:38:43.432105 2016] [:error] [pid 28273]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.438577 2016] [:error] [pid 28299]     assert tlock is not None
[Fri Oct 14 23:38:43.438654 2016] [:error] [pid 28299] AssertionError: 
[Fri Oct 14 23:38:43.442174 2016] [:error] [pid 28274]     assert tlock is not None
[Fri Oct 14 23:38:43.442226 2016] [:error] [pid 28274] AssertionError: 
[Fri Oct 14 23:38:43.447227 2016] [:error] [pid 28276] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.447294 2016] [:error] [pid 28276] Traceback (most recent call last):
[Fri Oct 14 23:38:43.447326 2016] [:error] [pid 28276]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.448813 2016] [:error] [pid 28277] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.448876 2016] [:error] [pid 28277] Traceback (most recent call last):
[Fri Oct 14 23:38:43.448903 2016] [:error] [pid 28277]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.450188 2016] [:error] [pid 28273]     assert tlock is not None
[Fri Oct 14 23:38:43.450231 2016] [:error] [pid 28273] AssertionError: 
[Fri Oct 14 23:38:43.456680 2016] [:error] [pid 28275]     assert tlock is not None
[Fri Oct 14 23:38:43.456737 2016] [:error] [pid 28275] AssertionError: 
[Fri Oct 14 23:38:43.461761 2016] [:error] [pid 28277]     assert tlock is not None
[Fri Oct 14 23:38:43.461826 2016] [:error] [pid 28277] AssertionError: 
[Fri Oct 14 23:38:43.466165 2016] [:error] [pid 28276]     assert tlock is not None
[Fri Oct 14 23:38:43.466219 2016] [:error] [pid 28276] AssertionError: 
[Fri Oct 14 23:38:43.658971 2016] [mpm_prefork:notice] [pid 28268] AH00169: caught SIGTERM, shutting down
[Sat Oct 15 03:38:43.691909 2016] [:error] [pid 28272] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Sat Oct 15 03:38:43.691968 2016] [:error] [pid 28272] Traceback (most recent call last):
[Sat Oct 15 03:38:43.691996 2016] [:error] [pid 28272]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Sat Oct 15 03:38:43.693126 2016] [:error] [pid 28272]     assert tlock is not None
[Sat Oct 15 03:38:43.693159 2016] [:error] [pid 28272] AssertionError: 
[Fri Oct 14 23:38:44.490316 2016] [:warn] [pid 28349] mod_wsgi: Compiled for Python/3.4.0.
[Fri Oct 14 23:38:44.490407 2016] [:warn] [pid 28349] mod_wsgi: Runtime using Python/3.4.3.
[Fri Oct 14 23:38:44.505672 2016] [mpm_prefork:notice] [pid 28349] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.19 mod_wsgi/3.4 Python/3.4.3 configured -- resuming normal operations
[Fri Oct 14 23:38:44.505764 2016] [core:notice] [pid 28349] AH00094: Command line: '/usr/sbin/apache2'
CoderGuy123
fuente
Crea una nueva pregunta. No hagas preguntas como respuestas.
Graham Dumpleton
1
No estoy haciendo una pregunta. Publicar una solución al mismo problema que funcionó para mí. Apache arroja el error 500 y el error en el archivo de registro es el mismo que el de la pregunta formulada aquí. Por favor relea mi respuesta. :)
CoderGuy123
Luego, incluya la solución real en su respuesta en lugar de vincularla a otra pregunta. Sin embargo, el problema es que esa otra publicación no menciona el populate()problema en absoluto y para mí parece un problema completamente diferente, por lo que no veo cómo crees que estaba resolviendo el mismo problema. Por lo que cualquiera puede decir, tuvo un problema diferente para el que debería haber hecho una pregunta separada al principio en lugar de confundir las respuestas aquí para lo que parece un problema diferente según los detalles de esa otra publicación ..
Graham Dumpleton
No es necesario repetir los pasos aquí. Los errores aparecen en el mismo registro, solo que OP aquí no lo incluyó todo. Se muestra un error cuando se accede a la página (esa es la parte en OP aquí), otro cuando se inicia Apache (esa es la parte en el otro hilo).
CoderGuy123
1

Sé que ha pasado un tiempo desde que se hizo esta pregunta, pero me encontré con este problema debido a un problema que no he visto discutido aquí. Recibí el RuntimeError: populate() isn't reentranterror debido a SELinux en CentOS 7. Hice que Django fuera servido desde un directorio de inicio, y simplemente tuve que habilitar el booleano SELinux que permitía leer directorios de inicio, ya que el error populate () se debía a un problema de permisos. La solución para mí fue setsebool -P httpd_read_user_content 1. Espero que esto ayude a alguien que tenga este problema.

Ad Astra
fuente
Tuvimos el mismo problema con CentOS 7 y SELinux. Lo arreglamos usando chconpara cambiar el contexto del .soarchivo del problema a httpd_sys_script_exec_t .
Jon
1

La multitud de respuestas lo deja claro; este es un error genérico que puede tener múltiples causas, generalmente relacionadas con la carga de Apache / WSGI.

Todas estas respuestas en esta página deberían funcionar como una especie de lista de verificación, y en ese sentido, quiero agregar la causa raíz de mi instancia de este error: falla al agregar un 'import os' a su archivo settings.py.

Específicamente, teníamos un desarrollador en nuestro equipo que tenía la intención de eliminar un paquete innecesario y, en su lugar, eliminó 'import os' de la parte superior del archivo settings.py de producción. Después de un reinicio de Apache, nuestra aplicación no se reiniciaba y recibimos el temido error 'RuntimeError: populate () doesn't reentrant'.

Una rápida 'comprobación de python manage.py' no reveló el problema, pero una 'python settings.py' sí; el paquete del sistema operativo no se cargó.

Si tiene este error, centre su búsqueda en comprobar su (s) archivo (s) settings.py y también su archivo WSGI.

Tom Halpin
fuente
3
Más importante aún, asegúrese de volver al registro de errores y buscar el primer mensaje de error que se produce después de reiniciar uno de los procesos del demonio de Apache o mod_wsgi. Ese primer error le dirá la verdadera razón del error, cualquier solicitud posterior para el mismo proceso mencionará reentrantsolo el error. En el modo demonio, asegúrese también de que está utilizando la startup-timeoutopción si tiene este problema debido a errores transitorios, en lugar de errores de codificación. Al menos de esa manera se puede recuperar automáticamente.
Graham Dumpleton
Esta es la respuesta correcta, el error es genérico, verifique el mensaje justo antes del error de ejecución.
Popieluch
1

RuntimeError: populate() isn't reentrant

Puede ser cualquier cosa, por eso hay tantas respuestas diferentes para esta pregunta.

El truco consiste en mirar el mensaje de error justo antes del RuntimeError. En su caso, parece haber un error de sintaxis en el archivo /extra/www/htmlquotes/quotes_django/quotespage/admin.py en la línea 15, consulte:

Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/htmlquotes/quotes_django/quotespage/admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] pprove_quotes.short_description = "Approve selected quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]                  ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax
Popieluch
fuente
1

Nota sobre AWS Elastic Beanstalk: el valor predeterminado settings.pyescrito por Django-admin incluye una referencia a una base de datos sqlite local como fuente de datos. Es probable que esto funcione en su sistema operativo local, pero no en AWS EB, y dará el populate() isn't reentranterror de tiempo de ejecución. Para probar esto, simplemente comente la DATABASES={<...>}declaración settings.py, implemente y vuelva a abrir la aplicación.

Usuario novato de AWS EB
fuente
Esto ocurre, por ejemplo, si implementa en AWS EB usando Django versión 2.2 (o posterior) con la base de datos sqlite predeterminada. Te django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).seguirá el RuntimeError: populate() isn't reentrant. De los documentos de AWS : "Django 2.2 es incompatible con la plataforma Elastic Beanstalk Python 3.6". (en el momento de escribir este artículo)
djvg
0

Tuve este problema y no pude encontrar ninguna respuesta por qué hasta que retrocedí en mis confirmaciones. Aparentemente, había agregado una importación accidental, debido a la finalización automática, que arruinó la configuración.

# found in models.py from msilib.schema import SelfReg

En el registro de errores de Apache: RuntimeError ("populate () no es reentrante")

Funcionó bien en mi entorno de desarrollo de Windows pero falló en el servidor ubuntu / apache.

ene
fuente
0

Estaba entrando en este mismo error después de haber cambiado el orden de esta configuración:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

ponerlo de nuevo en el orden aquí antes y reiniciar Apache solucionó el problema.

Romain Jouin
fuente
0

En mi caso, tenía un custom renderer classfor Django Rest Framework, por algún motivo tuve que anular el método de la clase de renderizador "get_context" (divulgación completa: para django toolbardar el recuento correcto de consultas SQL)

Quité esa clase y la redistribuí. Funcionó.

Karan Kumar
fuente
0

En mi caso, el error se produjo porque faltaba un paquete pip requerido.

Así que hice un pip install -r requirements.txtreinicio de Apache y las cosas funcionaron de nuevo.

flix
fuente
0

La eliminación del directorio virtualenv, la recreación del virtualenv y la reinstalación de todos los requisitos me solucionó.

Farid El Nasire
fuente
0

Añadiendo mi razón a la lista. Para mí fue porque tenía un servicio de django nombrado con el mismo directorio que un directorio de procesos. Cambiar el nombre del proceso / directorio solucionó el problema.

marca
fuente
0

Tuve un recursivo django.setup(), por ejemplo, intenté escribir un django.setup()dentro de un an app/models.py, en el seguimiento de la pila, django intentó señalar esto cerca de:

... "site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
...
... ./myproject/myapp/models.py ...

así que sí, asegúrese de no intentar configurar django mientras se está configurando django ...

ThorSummoner
fuente
0

Reiniciar el servidor Apache resolvió el problema. Puede hacerlo usando el comando $ sudo service apache2 restart

Shivam Kohli
fuente
0

Tuve este mismo problema, lo que funcionó para mí fue comentar la configuración predeterminada de la base de datos en / settings.py. También leí que las versiones posteriores de django no son compatibles con ebs

Steve Bien-Aime
fuente
0

Para mí, el error fue un mysqlclientpaquete que faltaba en el archivo requirements.txt.

Primero instalé el mysqlclientpaquete con:

pip install mysqlclient

luego actualicé el archivo requirements.txt con:

pip freeze > requirements.txt

y esto resolvió mi problema.

Abdulwahab Alhendi
fuente
-1

En mi caso, tuve una importación circular, lo que provocó un error que rompió el método de llenado.

Luis Carlos Mejía
fuente
-1

Para tirar mis 2 centavos de euro:

Recreé una configuración funcional en Docker. La nueva configuración de Docker falló con

populate isn't reentrant

que parece ser un error genérico. En mi caso, pasé por alto que

pip install Django

instala la última versión ( 2.0), en lugar de la versión requerida 1.11. Cambiando esto a

pip install Django==1.11

solucionó mi problema.

Olaf Dietsche
fuente
-1

Creo que este es un error genérico cuando algo anda mal settings.py. A veces puedo encontrar el problema mediante prueba y error eliminando las aplicaciones instaladas una a la vez. En algunos casos, no está relacionado con las aplicaciones instaladas. Pero desde mi experiencia, en todos los casos es un problema dentro del settings.pyarchivo.

Noel Puru
fuente
-1

compruebe si ha mencionado los nombres de su api dos veces en la sección de aplicaciones instaladas de settings.py.

Definición de aplicación

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp_api',
    'myapp_api.apps.myappWebserviceApiConfig',    
]

Definición de aplicación

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp_api.apps.myappWebserviceApiConfig',
]

Eliminar entradas duplicadas resolvió mi problema

Swati Srivastava
fuente
pero el tutorial dice INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming
@ming Es opcional.
Swati Srivastava