Django para de funcionar com RuntimeError: populate () não é reentrante

123

Estou desenvolvendo uma aplicação web Django implantada em um servidor Apache com WSGI, e tudo corre bem. Hoje, eu fiz algumas pequenas alterações no meu aplicativo admin.pyna tentativa de personalizar a interface Django Admin embutida e inicialmente cometi um erro de sintaxe (um parêntese não fechado). Isso significa que, quando toquei wsgi.pye carreguei o código (tenho WSGI em execução no modo daemon em meu host virtual), meu site foi substituído por um Erro interno do servidor porque o WSGI parou quando atingiu o erro de sintaxe.

Corrigi o erro de sintaxe, verifiquei se não tinha mais nenhum com manage.py checke toquei wsgi.pyem reimplantar. Mas meu site ainda exibe um erro interno do servidor! Verificando os logs do Apache, isto é o que vejo:

[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

A primeira série de erros mostra falha de WSGI devido ao erro de sintaxe em my admin.py. No entanto, a segunda série de erros parece mostrar um erro interno do Django:

RuntimeError: populate() isn't reentrant

jogado a partir do populatemétodo de registry.py.

Pesquisar essa mensagem de erro no Google retorna surpreendentemente poucas informações, nenhuma delas da documentação do Django. Aparentemente, às vezes pode acontecer se você nomear um aplicativo duas vezes no seu settings.py, mas não estou fazendo isso. Mais importante, não mudei settings.pydesde o ponto em que o site estava funcionando bem - a única coisa que mudei foi admin.py.

Tentei reverter todas as alterações que fiz, para que todo o meu código Python volte ao estado em que estava quando o site estava funcionando - e ainda recebo o populate() isn't reentranterro quando tento fazer o WSGI recarregar o código!

Eu também tentei comentar diferentes aplicativos na seção INSTALLED_APPS de settings.py, e mesmo com apenas 'django.contrib.staticfiles' habilitado, o erro ainda acontece. Estranhamente, ainda recebo o erro mesmo se comentar todos os aplicativos - o Django gera o erro mesmo quando não está carregando nenhum aplicativo!

Alguém sabe o que está acontecendo aqui? Ou alguma maneira melhor para eu depurar esse erro, já que o rastreamento no log do Apache é muito inútil?

Observações: Estou usando Django 1.7, Apache 2.2 e Python 2.7.

Edward
fonte
2
Eu tentaria remover todos os arquivos .pyc que possam existir.
dukebody
Não, remover todos os arquivos .pyc não ajudou. Tocar wsgi.pyresulta no mesmo erro do Apache, e os arquivos .pyc não são recriados.
Edward
1
Você já tentou reiniciar o Apache?
dukebody
Não consigo reiniciar o Apache porque não tenho direitos neste servidor. O administrador com acesso root não estará de volta ao escritório até segunda-feira.
Edward
No meu caso não foi instalado o app do INSTALLED_APPS no ambiente.
maciek de

Respostas:

99

Isso é causado por um bug em algum lugar nas configurações do Django. Infelizmente, o Django está escondendo o bug por trás dessa mensagem de erro genérica e inútil.

Para revelar o verdadeiro problema, abra django/apps/registry.pye em torno da linha 80, substitua:

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

com:

self.app_configs = {}

Isso permitirá que o Django continue carregando e revele o erro real.

Encontrei esse erro por várias causas diferentes. Uma vez foi porque tive uma importação incorreta em um dos admin.py do meu aplicativo.

Cerin
fonte
22
Esta é de longe a resposta mais útil neste tópico. Agora eu sei ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA
2
Salvou a minha vida. Essa solução me permitiu verificar com êxito os requisitos ausentes e os erros de compatibilidade entre eles.
Ángel Jiménez
1
Isso foi perfeito. Ao alterar essa linha, vejo que ocorreu um erro de importação simples. Eu não sabia o que estava acontecendo antes disso.
James
4
Essa resposta é ouro puro.
xpanta
2
@RickyA e este foi de longe o comentário mais útil, pois eu nem tive que me preocupar com essa resposta, apenas tentei pip install --upgrade psycopg2e resolvi .
Usuário
65

O administrador do meu servidor reiniciou o Apache, e isso magicamente corrigiu o problema. Os mesmos arquivos Python carregados sem causar populate() isn't reentrant. Eu até tentei carregar outro arquivo com um erro de sintaxe, depois corrigi-lo, e o servidor conseguiu carregar o novo arquivo e funcionar corretamente sem problemas.

Ainda não sei o que deu errado, mas estou marcando isso como respondido, pois o problema desapareceu. (Bem, vou marcá-lo como respondido assim que StackOverflow me permitir aceitar minha própria resposta.)

Atualização : depois de continuar a receber este erro quando acidentalmente carrego o Python com erros de sintaxe, descobri uma solução alternativa que é mais fácil do que reiniciar o Apache. Quando o WSGI começa a gerar o populate() isn't reentranterro, substituo o do meu projeto Django wsgi.pypor esta função simples:

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

Então, eu recarrego meu site e o processo do daemon WSGI é reiniciado (o que posso dizer olhando o log do Apache, embora o site ainda exiba o mesmo erro 500).

Se eu mudar de wsgi.pyvolta para o normal e recarregar novamente, o WSGI pegará meu código com sucesso sem lançar populate() isn't reentrant(assumindo que não tenho erros de sintaxe neste momento). Portanto, o Apache inteiro não precisa ser reiniciado, apenas o processo WSGI, e posso fazer isso sem privilégios de root.

Edward
fonte
8
Para mim, o problema não era migrar as alterações que fiz para um modelo em um dos meus aplicativos.
user2662692
Ok, estou enfrentando quase o mesmo problema e sim ele é corrigido ao reiniciar a máquina e reiniciar o servidor. Mas o problema continua se repetindo. Às vezes, de repente. dentro de um mês, ocorreu três vezes. Se alguém tiver alguma ideia, por favor ajude.
Rohit
@Rohit, se você quer ajuda com sua situação, você provavelmente deveria postar uma nova pergunta descrevendo-a. É improvável que você obtenha uma resposta nos comentários aqui.
Edward
4
Há uma startup-timeoutopção para o modo daemon do mod_wsgi em versões mais recentes do mod_wsgi que auxilia na recuperação de erros transitórios quando o Django está sendo inicializado, como um banco de dados não disponível. O tempo limite fará com que o processo seja reiniciado automaticamente se o aplicativo WSGI não carregar corretamente após o período de tempo limite. Mesmo isso não ajudará quando você tiver um problema permanente com seu próprio código. Nesse caso, procure o primeiro erro, não o populate()erro, pois ele fornecerá o verdadeiro motivo da falha do código.
Graham Dumpleton
1
O que você quer dizer com "wsgi.py do projeto Django com esta função simples"? Como você substitui um arquivo por uma função?
Cerin
46

Sei que essa é uma resposta antiga, mas vou contribuir com minha solução:

Como forma de diagnosticar a origem do problema, execute manage.py checke veja se você encontra algo lá

No meu caso, um requisito desatualizado era o problema e o Django não conseguia importar um submódulo

Certifique-se de que seus requisitos estão atualizados

Jesus Gomez
fonte
2
Recebo o Erro 500 no Apache e não consigo encontrar o problema. Por este comando manage.py checkencontrei o problema. Obrigado.
Ali Hesari
13

Não é uma resposta, mas uma reflexão.

Quando você atualiza para django 1.7 e você tem um erro 500 e recarrega sua página, o Apache diz "populate () não é reentrante". Eu acho que é quando você carrega sua página, o Apache carrega todos os módulos que você precisa para o seu aplicativo e quando o erro é resolvido ele não descarrega o módulo. Então, quando você recarregar sua página, o apache carrega novamente estes módulos, mas já está carregado. Então, o apache diz "populate () não é reentrante".

Tenho duas ações para corrigir isso: Reinicie o apache ou corrija o erro que manipulou o primeiro erro 5OO.

Tente reiniciar o apache com:

sudo service httpd restart

Espero que ajude você.

Vianney Thurotte
fonte
10

Se você estiver recebendo este erro ao usar o Google App Engine, verifique seus registros para outros erros que podem estar causando isso. Eu estava conseguindo:

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

Você não pode usar o SQLite com o Google App Engine, portanto, comentar a DATABASESseção de settings.pyinterrompeu esse erro e o RuntimeError("populate() isn't reentrant")erro também.

donturner
fonte
Isso explica por que tudo funcionou bem localmente, mas obteve o erro 500 quando implantado no GAE. Uma pequena dica: pesquisar o texto "raise" na página de log do GAE gerou exatamente um acerto que levou à mensagem de erro apontada por donturner. A solução dele salvou meu dia :-)
Golden Thumb
4

Você pode consertá-lo sem reiniciar o Apache tocando em um arquivo (diferente de wsgi.py) que está no início do processo de carregamento. Por exemplo, seu arquivo de configurações:

$ touch settings.py

Eu também não resolvi isso adequadamente, mas mais informações na minha pergunta aqui: Monitoramento de alteração de código com defeito com Django 1.7 no mod-wsgi

seddonym
fonte
2

Eu simplesmente enfrentei o mesmo problema, então comecei a procurar.

Agora que está funcionando, achei melhor compartilhar com vocês!

Tudo o que fiz foi fazer chown user:group /to/path -Re chmod 770 /to/path -Rtudo de novo e funcionou.

Behzad
fonte
2

Esta parece ser uma boa coleção de respostas válidas para o mesmo erro do mod-wsgi do Apache, cada cara postando aquela que funciona para ele, então aqui está a minha:

Não se esqueça de atualizar os requisitos do seu projeto após a implantação :)

José L. Patiño
fonte
2

Eu tive esse mesmo problema, e a origem do erro para mim era apenas um erro de sintaxe em um arquivo com o qual eu estava trabalhando. Depois de corrigir o erro de digitação, o populate() is not reentranterro desapareceu.

Se você estiver executando o django a partir de um script wsgi, poderá identificar o erro de digitação apenas executando o script wsgi na linha de comando. Por exemplo:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi
Peter
fonte
2

Este erro também gerava se houvesse inconsistência no uso de espaço e tabulação no código.

webbyfox
fonte
1

Configuração: Ubuntu 14.04, Django 1.10, Python 3.5 (in virtualenv).

Tentei muitas dessas soluções sem sorte, mas então percebi que o log de erros do Apache contém dois erros diferentes no meu caso. Um que acontece quando alguém tenta visitar uma página, outro que acontece na inicialização. Perdi a inicialização porque normalmente tentei atualizar a página algumas vezes e, portanto, só vi o erro na visita repetido algumas vezes.

Em seguida, procurei soluções para o erro de inicialização e a solução para essa questão funcionou para mim . Resumidamente, envolve atualizar o mod_wsgipacote de forma indireta.

Eu vinha recebendo avisos por meses sobre a incompatibilidade de mod_wsgiversões, mas de repente isso resultou em erro 500 do Apache. Não faz sentido para mim.

Meu palpite é que esse RuntimeError: populate() isn't reentranterro geralmente é um sinal de que se deve procurar um erro de inicialização, que indica o problema real.

na 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

comece

[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
fonte
Crie uma nova pergunta. Não faça perguntas como respostas.
Graham Dumpleton
1
Não estou fazendo uma pergunta. Postando uma solução para o mesmo problema que funcionou para mim. O Apache lança o erro 500 e o erro no arquivo de log é o mesmo da pergunta feita aqui. Por favor, releia minha resposta. :)
CoderGuy123
Em seguida, inclua a solução real em sua resposta, em vez de vincular a outra pergunta. O problema é que essa outra postagem não menciona o populate()problema de forma alguma e para mim parece um problema totalmente diferente, então não consigo ver como você acha que estava resolvendo o mesmo problema. Até onde qualquer um pode dizer, você teve um problema diferente para o qual deveria ter feito uma pergunta separada no início, em vez de confundir as respostas aqui para o que parece ser um problema diferente com base nos detalhes daquela outra postagem.
Graham Dumpleton
Não é necessário repetir as etapas aqui. Os erros aparecem no mesmo log, só que o OP aqui não incluiu tudo. Um erro é mostrado quando a página é acessada (essa é a parte do OP aqui), outro quando o Apache é iniciado (essa é a parte do outro thread).
CoderGuy123
1

Sei que já faz um tempo que essa pergunta foi feita, mas acabei de encontrar esse problema devido a um problema que não vi discutido aqui. Eu estava recebendo o RuntimeError: populate() isn't reentranterro devido ao SELinux no CentOS 7. Eu tinha o Django servido fora de um diretório home e simplesmente tinha que habilitar o booleano SELinux que permitia a leitura de diretórios home, já que o erro populate () era devido a um problema de permissões. A solução para mim foi setsebool -P httpd_read_user_content 1. Espero que isso ajude alguém com esse problema.

Ad Astra
fonte
Tivemos o mesmo problema com o CentOS 7 e o SELinux. Corrigimos isso usando chconpara alterar o contexto do .soarquivo com problema para httpd_sys_script_exec_t .
Jon
1

A multidão de respostas deixa isso claro; este é um erro genérico que pode ter várias causas raiz, geralmente relacionadas ao carregamento do Apache / WSGI.

Todas essas respostas nesta página devem funcionar como uma espécie de lista de verificação e, nesse sentido, quero adicionar a causa raiz da minha instância desse erro: falha ao adicionar um 'import os' ao arquivo settings.py.

Especificamente, tínhamos um desenvolvedor em nossa equipe que pretendia remover um pacote desnecessário e, em vez disso, removeu 'import os' do início do arquivo settings.py de produção. Após uma reinicialização do apache, nosso aplicativo não reiniciou e recebemos o temido erro 'RuntimeError: populate () não é reentrante'.

Uma rápida 'verificação de python manage.py' não revelou o problema, mas um 'python settings.py' sim; o pacote do sistema operacional não foi carregado.

Se você tiver esse erro, concentre sua pesquisa na verificação de seu (s) arquivo (s) settings.py e também em seu arquivo WSGI.

Tom Halpin
fonte
3
Mais importante, certifique-se de voltar ao log de erros e procurar pela primeira mensagem de erro que ocorre após a reinicialização de um dos processos do daemon do Apache ou mod_wsgi. O primeiro erro informará a verdadeira razão do erro; quaisquer solicitações posteriores para o mesmo processo mencionarão reentrantapenas o erro. No modo daemon, certifique-se também de usar a startup-timeoutopção se tiver esse problema devido a erros temporários, em vez de erros de codificação. Pelo menos assim ele pode se recuperar automaticamente.
Graham Dumpleton
Esta é a resposta certa, o erro é genérico, verifique a mensagem antes do runtimeerror.
Popieluch 01 de
1

RuntimeError: populate() isn't reentrant

Pode ser qualquer coisa, por isso existem tantas respostas diferentes para essa pergunta.

O truque é examinar a mensagem de erro antes de RuntimeError. No seu caso, parece haver um erro de sintaxe no arquivo /extra/www/htmlquotes/quotes_django/quotespage/admin.py na linha 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
fonte
1

Nota sobre o AWS Elastic Beanstalk: O padrão settings.pyque é escrito por Django-admin inclui uma referência a um banco de dados sqlite local como a fonte de dados. Isso provavelmente funcionará no seu sistema operacional local, mas não no AWS EB, e apresentará o populate() isn't reentranterro de tempo de execução. Para testar isso, basta comentar a DATABASES={<...>}instrução settings.py, implantar e reabrir o aplicativo.

Usuário iniciante AWS EB
fonte
Isso ocorre, por exemplo, se você implantar no AWS EB usando Django versão 2.2 (ou posterior) com o banco de dados sqlite padrão. Você será django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).seguido pelo RuntimeError: populate() isn't reentrant. Dos documentos da AWS : "Django 2.2 é incompatível com a plataforma Elastic Beanstalk Python 3.6." (no momento da escrita)
djvg
0

Eu tive esse problema e não consegui encontrar nenhuma resposta até que eu retrocedesse meus commits. Aparentemente, eu adicionei uma importação acidental, por causa do preenchimento automático, que bagunçou a configuração.

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

No registro de erros do Apache: RuntimeError ("populate () não é reentrante")

Funcionou bem no meu ambiente Windows Dev, mas falhou no servidor ubuntu / apache.

Jan
fonte
0

Eu estava cometendo o mesmo erro depois de ter alterado a ordem dessa configuração:

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',
)

colocá-lo de volta no pedido aqui antes e reiniciar o apache corrigiu o problema.

Romain Jouin
fonte
0

No meu caso, eu tinha um custom renderer classfor Django Rest Framework, para alguma finalidade eu tive que substituir o método da classe renderizador "get_context" (divulgação completa: para fazer django toolbardar a contagem correta da consulta SQL)

Eu removi essa classe e reimplantei. Funcionou.

Karan Kumar
fonte
0

No meu caso, o erro ocorreu porque um pacote pip requerido estava faltando.

Então eu fiz um pip install -r requirements.txt, reiniciei o apache e as coisas funcionaram novamente.

flix
fonte
0

Remover o diretório virtualenv, recriar o virtualenv e reinstalar todos os requisitos corrigidos para mim.

Farid El Nasire
fonte
0

Adicionando meu motivo à lista. Para mim, foi porque eu tinha um serviço django nomeado com o mesmo diretório de um diretório de processo. Renomear o processo / dir corrigiu o problema.

Marca
fonte
0

Eu tinha um recursivo django.setup(), por exemplo, tentei escrever um django.setup()dentro de um app/models.py, no django de rastreamento de pilha tentei apontar isso próximo a:

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

então sim, certifique-se de não tentar configurar o django enquanto o django está sendo configurado ...

ThorSummoner
fonte
0

Reiniciar o servidor Apache para mim resolveu o problema. Você pode fazer isso usando o comando $ sudo service apache2 restart

Shivam Kohli
fonte
0

Eu tive esse mesmo problema, o que funcionou para mim foi comentar as configurações de banco de dados padrão em / settings.py. Também li que as versões posteriores do Django não são compatíveis com o ebs

Steve Bien-Aime
fonte
0

Para mim, o erro foi um mysqlclientpacote ausente no arquivo requirements.txt.

Primeiro instalei o mysqlclientpacote com:

pip install mysqlclient

então, atualizei o arquivo requirements.txt com:

pip freeze > requirements.txt

e isso resolveu meu problema.

Abdulwahab Alhendi
fonte
-1

No meu caso, tive uma importação circular, que causou um erro que quebrou o método populate.

Luis Carlos Mejia
fonte
-1

Para jogar meus 2 centavos de euro:

Recriei uma configuração de trabalho no Docker. A nova configuração do Docker falhou com

populate isn't reentrant

o que parece ser um erro genérico. No meu caso, esqueci que

pip install Django

instala a versão mais recente ( 2.0), em vez da versão necessária 1.11. Mudando isso para

pip install Django==1.11

consertou meu problema.

Olaf Dietsche
fonte
-1

Acho que é um erro genérico quando algo está errado settings.py. Às vezes, posso encontrar o problema por tentativa e erro, removendo os aplicativos instalados um de cada vez. Em alguns casos, não está relacionado aos aplicativos instalados. Mas, pela minha experiência, em todos os casos é um problema dentro do settings.pyarquivo.

Noel Puru
fonte
-1

verifique se você mencionou seus nomes de API duas vezes na seção de aplicativos instalados do settings.py.

Definição de aplicativo

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

Definição de aplicativo

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

Remover entradas duplicadas resolveu meu problema

Swati Srivastava
fonte
mas o tutorial diz INSTALLED_APPS = [ 'allauth', 'allauth.account', 'allauth.socialaccount',]
ming
@ming É opcional.
Swati Srivastava