Django停止使用RuntimeError:populate()未重入


123

我一直在开发使用WSGI部署在Apache服务器上的Django Web应用程序,并且一切进展顺利。今天,我对应用程序进行了一些较小的更改admin.py,以尝试自定义内置Django Admin界面,并且最初出现了语法错误(括号未封闭)。这意味着当我触摸wsgi.py并加载代码时(我的虚拟主机上的WSGI以守护程序模式运行),我的网站被内部服务器错误替换,因为WSGI遇到语法错误时就停止了。

因此,我更正了语法错误,并检查了我是否再也没有了manage.py check,并wsgi.py尝试重新部署。但是我的网站仍然显示内部服务器错误!检查Apache日志,这是我看到的:

[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

第一系列错误显示WSGI因my语法错误而失败admin.py。但是,第二系列错误似乎显示了Django内部的错误:

RuntimeError: populate() isn't reentrant

从的populate方法抛出registry.py

谷歌搜索此错误消息返回的信息少得令人惊讶,Django文档中没有提供任何信息。显然,如果您在中两次命名应用程序,有时可能会发生这种情况settings.py,但我没有这么做。更重要的是,settings.py自网站运行正常以来,我一直没有改变-我唯一改变的是admin.py

我尝试还原所做的所有更改,因此我所有的Python代码都恢复为网站正常运行的状态- populate() isn't reentrant当我尝试使WSGI重新加载代码时,仍然出现错误!

我还尝试在的INSTALLED_APPS部分中注释掉不同的应用程序settings.py,即使仅启用了django.contrib.staticfiles,该错误仍然会发生。奇怪的是,即使我注释掉所有应用程序,我仍然会收到错误消息-Django 即使未加载任何应用程序也会抛出错误!

有人知道这是怎么回事吗?还是因为Apache日志中的回溯对您没有任何帮助,所以我可以用哪种更好的方法来调试此错误?

注意:我正在使用Django 1.7,Apache 2.2和Python 2.7。


2
我会尝试删除所有可能存在的.pyc文件。
dukebody 2014年

不,删除所有.pyc文件无济于事。触摸会wsgi.py导致相同的Apache错误,并且不会重新创建.pyc文件。
爱德华

1
您是否尝试过重新启动Apache?
dukebody 2014年

我无法重新启动Apache,因为我没有此服务器上的权限。具有root用户访问权限的管理员要到星期一才能回到办公室。
爱德华

就我而言,它不是在环境中通过INSTALLED_APPS安装的应用。
maciek

Answers:


99

这是由您的Django设置中的某个错误引起的。不幸的是,Django将该错误隐藏在此通用且无用的错误消息背后。

为了揭示真正的问题,打开django/apps/registry.py并围绕80行,替换:

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

与:

self.app_configs = {}

这将允许Django继续加载,并显示实际错误。

我因几种不同的原因遇到了此错误。曾经是因为我的一个应用程序admin.py中导入错误。


22
到目前为止,这是该线程中最有用的答案。现在我知道->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA

2
救了我一命。此解决方案使我能够成功检查缺失的需求以及它们之间的兼容性错误。
西蒙尼斯

1
太完美了 更改那一行,让我看到我有一个简单的导入错误。我不知道在那之前发生了什么。
詹姆斯

4
这个答案是纯金的。
xpanta19年

2
@RickyA,这是迄今为止最有用的注释,因为我什至不必打扰这个答案,pip install --upgrade psycopg2而已尝试并修复了它。
用户

65

我的服务器的管理员重新启动了Apache,这神奇地解决了这个问题。完全相同的Python文件加载而不会引起populate() isn't reentrant。我什至尝试加载另一个语法错误的文件,然后对其进行修复,服务器能够加载新文件并正常运行而没有任何问题。

我仍然不知道出了什么问题,但是由于问题已经解决,因此我将其标记为“已解决”。(好吧,只要StackOverflow允许我接受自己的答案,我就会将其标记为已回答。)

更新:当我不小心上传带有语法错误的Python并继续出现此错误后,我想出了一种解决方法,比重新启动Apache更容易。当WSGI开始引发populate() isn't reentrant错误时,我wsgi.py用以下简单函数替换了Django项目:

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

然后,我重新加载我的网站,并且WSGI守护进程重新启动(即使网站仍然显示相同的500错误,我也可以通过查看Apache日志来判断)。

如果我然后wsgi.py恢复到正常状态并再次重新加载,则WSGI成功地拾取了我的代码而没有抛出populate() isn't reentrant(假设这次我没有语法错误)。因此,整个Apache不需要重新启动,仅需要重新启动WSGI进程,而我无需root特权就可以重新启动。


8
对我而言,问题不在于迁移我对其中一个应用程序中的模型所做的更改。
user2662692 2015年

好的,我面临几乎相同的问题,是的,它在重新启动计算机和重新启动服务器时已得到修复。但是问题一直在重复。有时突然之间。一个月之内发生了三次。如果有人有任何想法,请帮助。
罗希特

@Rohit,如果您需要有关情况的帮助,则可能应该发布一个描述它的新问题。您不太可能在此处的评论中得到答案。
Edward

4
startup-timeout在最新版本的mod_wsgi中,有一个针对mod_wsgi的守护程序模式的选项,该选项有助于在初始化Django(例如,数据库不可用)时从瞬时错误中恢复。如果在超时期限后WSGI应用程序无法正确加载,则超时将导致进程自动重新启动。即使这对您自己的代码存在永久性问题也无济于事。在这种情况下,请查找第一个错误,而不是populate()错误,因为这将给出代码失败的真正原因。
Graham Dumpleton '16

1
您的意思是“带有此简单功能的Django项目的wsgi.py”?如何用功能替换文件?
塞林

46

我知道这是一个旧答案,但是我将为我的解决方案做出贡献:

作为诊断问题根源的一种方法manage.py check,查看是否在此找到了任何东西

就我而言,过时的要求是问题,而django无法导入子模块

确保您的要求是最新的


2
我在Apache上收到错误500,但找不到问题。通过此命令,manage.py check我发现了问题。谢谢。
Ali Hesa​​ri'9

13

这不是回应,而是反思。

当您升级到django 1.7时,出现500错误并重新加载页面,Apache说“ populate()不可重入”。我认为是在您加载页面,Apache加载应用程序所需的所有模块时以及错误被处理时不会卸载模块。因此,当您重新加载页面时,apache会再次加载这些模块,但是已经加载了。因此,apache表示“ populate()不可重入”。

我有两个操作可纠正此问题:重新启动apache,或更正处理第一个5OO错误的错误。

尝试使用以下命令重新启动apache:

sudo service httpd restart

希望对您有帮助。


10

如果您在使用Google App Engine时遇到此错误,请检查日志中是否存在其他可能导致此错误的错误。我得到:

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

您不能将SQLite与Google App Engine一起使用,因此请注释掉停止该错误的DATABASES部分settings.py以及该RuntimeError("populate() isn't reentrant")错误。


这解释了为什么在本地一切正常,但是在部署到GAE时却出现500错误。一个小提示:在GAE日志页面上搜索文本“ raise”会产生准确的一击,从而导致donturner指出错误消息。他的解决方案挽救了我的一天:-)
Golden Thumb '18



2

我只是遇到了同样的问题,所以我开始四处张望。

现在我已经开始使用它了,所以我想应该与大家分享!

我所做的只是一遍又一遍,chown user:group /to/path -R而且chmod 770 /to/path -R一切正常。


2

对于相同的Apache mod-wsgi错误,这看起来像是一个不错的有效响应集合,每个人都发布了一个适用于他/她的错误,因此这里是我的:

部署后,请不要忘记更新您的项目要求:)


2

我遇到了同样的问题,对我来说,错误的根源只是我正在使用的文件中的语法错误。修正错字后,populate() is not reentrant错误消失了。

如果您是通过wsgi脚本运行django,则仅通过从命令行运行wsgi脚本就可以识别拼写错误。例如:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi

2

如果不一致使用代码中的空格和制表符,也会生成此错误。


1

设置:Ubuntu 14.04,Django 1.10,Python 3.5(位于中virtualenv)。

我尝试了许多这样的解决方案时都没有走运,但是后来我发现Apache错误日志中包含两个不同的错误。一种是在有人尝试访问页面时发生的,另一种是在启动时发生的。我错过了启动页面,因为我通常尝试刷新页面几次,因此只看到几次访问错误。

然后,我搜索了启动错误的解决方案,该问题的解决方案为我工作。简要地说,它涉及mod_wsgi以环形方式更新软件包。

我几个月来一直在收到有关mod_wsgi版本不匹配的警告,但突然导致Apache错误500。对我来说没有任何意义。

我的猜测是,该RuntimeError: populate() isn't reentrant错误通常是一个迹象,表明应该寻找启动错误,这表明了真正的问题。

参观时

[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: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'

创建一个新问题。不要问问题作为答案。
Graham Dumpleton '16

1
我不是在问问题。发布对我有用的相同问题的解决方案。Apache引发错误500,并且日志文件中的错误与此处提出的问题相同。请重读我的答案。:)
CoderGuy123 '16

然后在您的答案中包括实际的解决方案,而不是链接到另一个问题。问题在于,尽管其他帖子根本没有提到该populate()问题,但对我来说,这似乎是一个完全不同的问题,所以我看不到您认为它是如何解决同一问题的。因此,就任何人所知,您遇到了一个不同的问题,您应该从一开始就询问一个单独的问题,而不是根据另
一篇

无需在此重复步骤。错误出现在同一日志中,只是这里的OP不包括所有错误。访问页面时显示一个错误(这里是OP中的一部分),而Apache启动时则显示另一个错误(这是另一个线程中的一部分)。
CoderGuy123 '16

1

我知道自问这个问题已经有一段时间了,但是由于我在这里未曾讨论过这个问题,所以我刚遇到了这个问题。RuntimeError: populate() isn't reentrant由于CentOS 7上的SELinux,我遇到了错误。我将Django从主目录中送出,并且我只需要启用允许读取主目录的SELinux布尔值,因为populate()错误是由于权限问题引起的。对我来说解决方案是setsebool -P httpd_read_user_content 1。希望这对遇到此问题的人有所帮助。


我们在CentOS 7和SELinux上也遇到了同样的问题。我们通过使用chcon将问题.so文件的上下文更改为来修复此问题httpd_sys_script_exec_t
乔恩(Jon)

1

答案众多,很清楚;这是一个常见错误,可能有多个根本原因,通常与加载Apache / WSGI有关。

此页面上的所有这些答案都应作为一种清单,在这种情况下,我想添加此错误实例的根本原因:无法将“ import os”添加到settings.py文件。

具体来说,我们团队中有一位开发人员打算删除不需要的软件包,而是从生产settings.py文件顶部删除了“ import os”。在重新启动apache之后,我们的应用程序将不会重新启动,并且我们收到了可怕的“ RuntimeError:populate()is not reentrant”错误。

快速的“ python manage.py check”没有发现问题,但是有“ python settings.py”。os包未加载。

如果发生此错误,请集中精力检查您的settings.py文件以及WSGI文件。


3
更重要的是,确保您返回错误日志,并查找在重启Apache或mod_wsgi守护进程之一后出现的第一条错误消息。第一个错误将告诉您错误的真正原因,此后针对同一进程的任何请求都将reentrant仅提及该错误。在守护程序模式下,startup-timeout如果由于暂时错误而不是编码错误而出现此问题,还请确保您正在使用option。至少这样可以自动恢复。
Graham Dumpleton '18

这是正确的答案,错误是通用的,请在运行错误之前检查消息。
Popieluch '19

1

RuntimeError: populate() isn't reentrant

可以是任何东西,这就是为什么这个问题有这么多不同的答案的原因。

诀窍是查看之前的错误消息RuntimeError。在您的情况下,第15行的/extra/www/htmlquotes/quotes_django/quotespage/admin.py文件中似乎存在语法错误,请参见:

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

1

关于AWS Elastic Beanstalk的注释:settings.pyDjango-admin编写的默认值包括对本地sqlite数据库作为数据源的引用。这可能会在您的本地OS上运行,但不适用于AWS EB,并且会出现populate() isn't reentrant运行时错误。要对此进行测试,只需将中的DATABASES={<...>}语句注释掉settings.py,部署并重新打开该应用程序。


例如,如果您使用带有默认sqlite数据库的Django 2.2(或更高版本)部署到AWS EB,则会发生这种情况。您将django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).跟随RuntimeError: populate() isn't reentrant。来自AWS文档:“ Django 2.2与Elastic Beanstalk Python 3.6平台不兼容。” (在撰写本文时)
djvg,

0

我遇到了这个问题,直到回溯我的提交之前,找不到任何答案。显然,由于自动补全,我添加了一个意外导入,从而搞砸了设置。

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

在apache错误日志中:RuntimeError(“ populate()is not reentrant”)

在我的Windows开发环境中,它工作正常,但在ubuntu / apache服务器上失败了。


0

更改此设置的顺序后,我遇到了同样的错误:

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

将其重新放回此处的订单,然后重新启动apache即可解决此问题。


0

就我而言,我有一个custom renderer classfor Django Rest Framework,出于某种目的,我不得不重写渲染器类的方法“ get_context”(完整披露:使django toolbar给出正确的SQL查询计数)

我删除了该课程并重新部署了。有效。


0

在我的情况下,由于缺少必需的pip软件包而发生了错误。

所以我做了一个pip install -r requirements.txt,重新启动了Apache,事情又恢复了。



0

将我的原因添加到列表中。对我来说,这是因为我有一个django服务,该服务的名称与进程目录相同。重命名进程/目录可以解决此问题。


0

我有一个递归django.setup(),例如,我试图在堆栈跟踪django中的django.setup()里面写一个an app/models.py,试图指出这一点:

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

所以,请确保在设置django时不要尝试设置django ...



0

我遇到了同样的问题,对我有用的是注释掉/ settings.py中的默认数据库设置。我还读到Django的更高版本与ebs不兼容


0

对我来说,错误是mysqlclientrequirements.txt文件中缺少软件包。

首先,我使用以下命令安装了mysqlclient软件包:

pip install mysqlclient

然后我使用以下命令更新了requirements.txt文件:

pip freeze > requirements.txt

这解决了我的问题。



-1

投入我的2欧分:

我在Docker中重新创建了工作设置。新的Docker设置因

populate isn't reentrant

这似乎是一个一般性错误。就我而言,我忽略了

pip install Django

安装最新版本(2.0),而不是必需的版本1.11。更改为

pip install Django==1.11

解决了我的问题。


-1

我认为这是通用错误,如果出现问题settings.py。有时我可以一次删除一个已安装的应用程序,通过反复试验来发现问题。在某些情况下,它与已安装的应用程序无关。但是从我的经验来看,在所有情况下,settings.py文件内都是一个问题。


-1

检查您是否在settings.py的已安装应用部分中两次提到了api名称。

应用定义

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

应用定义

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

删除重复的条目解决了我的问题


但本教程说INSTALLED_APPS = ['allauth','allauth.account','allauth.socialaccount',]

@ming是可选的。
Swati Srivastava '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.