Django 停止使用 RuntimeError: popular ()不是可重入的

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

因此,我修复了语法错误,检查了 manage.py check中没有更多的错误,并触摸了 wsgi.py以重新部署。但是我的网站仍然显示一个内部服务器错误!查看阿帕奇的日志,我看到了这个:

[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 由于 admin.py中的语法错误而失败。然而,第二系列错误似乎显示了 Django 内部的一个错误:

RuntimeError: populate() isn't reentrant

registry.pypopulate方法抛出。

在 Google 中搜索这条错误消息,只能得到很少的信息,这些信息都不是来自 Django 文档。显然,如果你在 settings.py中给一个应用程序命名两次,有时会发生这种情况,但我不会这么做。更重要的是,自从网站运行良好以来,我没有改变过 settings.py——我唯一改变的就是 admin.py

我尝试恢复我所做的所有更改,所以我所有的 Python 代码都回到了网站工作时的状态——当我尝试让 WSGI 重新加载代码时,我仍然会得到 populate() isn't reentrant错误!

我还尝试过在 settings.py的 INSTALLED _ APPS 部分注释掉不同的应用程序,即使只启用了“ django.Contrib.staticfiles”,错误仍然会发生。奇怪的是,我仍然得到错误,即使我注释出 所有的应用程序-Django 抛出的错误,即使它没有加载任何应用程序!

有人知道这是怎么回事吗?或者有什么更好的方法来调试这个错误,因为 Apache 日志中的回溯非常没有帮助?

注意: 我使用的是 Django 1.7、 Apache 2.2和 Python 2.7。

130892 次浏览

这不是一种反应,而是一种反射。

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

我有两个操作来纠正这个错误: 重新启动 apache,或者纠正处理第一个500错误的错误。

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

sudo service httpd restart

我希望这能帮到你。

来自未来的更新

由于这个问题在我最初提出这个问题多年后仍然受到关注,我想我应该更新我的答案,以便更好地帮助未来的读者解决他们的问题。

结果表明,(至少)有两个不同的原因可能导致“ populate () isn’t reentrant”错误,因此解决这个问题有两种不同的方法:

  1. Python 代码或 Django 设置中有一个错误,导致应用程序无法正确初始化。正如@Cerin 的回答所指出的那样,Django 隐藏了真正的问题在毫无帮助的“ popula isn’t reentrant”消息背后。要修复这个问题并显示实际错误,请遵循@Cerin 的建议并编辑 django/apps/registry.py,以使 Django 停止抛出 RuntimeError。

  2. 您的 Python 代码中曾经出现过一个错误,但是您已经修复了它,而且 Django 仍然在此消息中失败,因为 WSGI 不会重新加载您修复的代码。这是 WSGI 问题,不是 Django 问题。修复它的一种方法是临时编辑 wsgi.py,这样它的 application函数就会杀死 WSGI 进程(迫使它重新启动) ,正如我在最初的答案中所描述的; 另一种方法是设置 mod _ WSGI 的 startup-timeout选项,这样 WSGI 就会重新启动,就像@Graham Dumpleton 在评论中所描述的那样。重新启动整个 Apache 服务器也可以解决这个问题,因为它会顺便重新启动 WSGI,尽管这有点笨拙,而且如果您不是 Web 服务器上的管理员,这也不总是可能的。

原答案如下:


我的服务器管理员重新启动了 Apache,奇迹般地解决了这个问题。加载完全相同的 Python 文件而不导致 populate() isn't reentrant。我甚至尝试加载另一个语法错误的文件,然后修复它,服务器能够加载新文件并正确运行,没有问题。

我还是不知道出了什么问题,但是我把这个标记为已经解决了,因为问题已经解决了。(好吧,只要 StackOverflow 允许我接受自己的答案,我就会把它标记为已回答。)

更新 : 当我不小心上传带有语法错误的 Python 时,我继续得到这个错误,之后我找到了一个比重新启动 Apache 更容易的解决方案。当 WSGI 开始抛出 populate() isn't reentrant错误时,我用这个简单的函数替换 Django 项目的 wsgi.py:

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

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

如果我随后将 wsgi.py修改为正常并再次重新加载,WSGI 将成功地在不抛出 populate() isn't reentrant的情况下获取我的代码(假设这次没有语法错误)。所以整个 Apache 不需要重新启动,只需要 WSGI 进程,而且我可以在没有 root 权限的情况下做到这一点。

通过接触加载过程早期的一个文件(wsgi.py 除外) ,您可以在不重新启动 Apache 的情况下修复它。例如,您的设置文件:

$ touch settings.py

我还没有正确地解决这个问题,但更多的信息在我的问题这里: Mod-wsgi 上 Django 1.7的代码更改监视故障

我遇到了同样的问题,对我来说,错误的根源只是我正在处理的文件中的一个语法错误。在修复了输入错误之后,populate() is not reentrant错误消失了。

如果从 wsgi 脚本运行 django,那么可以通过从命令行运行 wsgi 脚本来识别输入错误。例如:

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

如果在使用 GoogleAppEngine 时出现此错误,请检查您的日志中是否有其他可能导致此错误的错误。我得到的是:

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

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

我遇到了这个问题,并且找不到任何答案,直到我回溯了我的提交。显然,我添加了一个意外的导入,因为自动完成,这搞砸了设置。

# 在模特身上找到 来自 msilib.schema import SelfReg

在 Apache 错误日志中: RuntimeError (“ popular () isn’t reentrant”)

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

由于你的电脑/主机/VPS 缺少 记忆,释放一些内存,一切都会好起来的。

我在更改了这个设置的顺序之后又出现了同样的错误:

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 修复了这个问题。

我也遇到了同样的问题,所以我开始四处看看。

现在我已经把它修好了,所以我想我应该和你们分享它!

我所做的就是把 chown user:group /to/path -Rchmod 770 /to/path -R重新做一遍,结果奏效了。

这看起来像是一个针对同一个 Apache mod-wsgi 错误的有效响应的很好的集合,每个人都发布了一个为他/她工作的响应,所以这里是我的:

不要忘记在部署之后更新您的项目需求:)

Apache 将 wsgi 文件存储在其缓存中。 禁用 Python 文件的 Apache 缓存

因此,首先删除 wsgi 文件并重新启动 Apache,然后再次添加 wsgi 文件并重新启动 apache。

在我的例子中,我有一个 custom renderer class用于 Django Rest Framework,出于某种原因,我必须覆盖渲染器类的方法“ get _ context”(完全公开: 使 django toolbar给出正确的 SQL 查询计数)

我移除了那个类,重新部署了,成功了。

安装: 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'

我知道自从这个问题被提出已经有一段时间了,但是我只是碰到了这个问题,因为我还没有看到在这里讨论的问题。由于 CentOS 7上的 SELinux,我得到了 RuntimeError: populate() isn't reentrant错误。我让 Django 服务于一个主目录,我只需要启用允许读取主目录的 SELinux 布尔值,因为填充()错误是由于权限问题造成的。我的解决方案是 setsebool -P httpd_read_user_content 1。我希望这能帮助有这个问题的人。

我知道这是一个古老的答案,但我会贡献我的解决方案:

作为诊断问题根源的一种方法,运行 manage.py check并查看您是否在其中发现了什么

在我的例子中,一个过时的需求是问题所在,django 没有导入一个子模块

确保您的需求是最新的

在我的例子中,错误发生是因为缺少一个必需的 pip-package。

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

在我的例子中,我有一个循环导入,它会导致中断填充方法的错误。

我解决了将 __init__.py添加到我的应用程序文件夹的问题。

touch /mainprojectfolder/projectfolderwhichcontainswsgi.py/apps/__init__.py

那就成功了!

加上我的2欧分:

我在 Docker 中重新创建了一个工作设置

populate isn't reentrant

这似乎是一个普遍的错误。 对我来说,我忽略了这一点

pip install Django

安装 最新的版本(2.0) ,而不是所需的版本 1.11。 把这个改成

pip install Django==1.11

解决了我的问题。

删除 viralenv 目录,重新创建 viralenv,然后重新安装为我修复的所有需求。

我认为当 settings.py出现问题时,这是一个通用错误。有时候,我可以通过尝试和错误来发现问题,一次删除一个已安装的应用程序。在某些情况下,它与已安装的应用程序无关。但根据我的经验,在所有情况下,这都是 settings.py文件中的问题。

大量的答案表明了这一点; 这是一个通用错误,可能有多种根源,通常与加载 Apache/WSGI 有关。

这个页面上的所有这些答案都应该作为一种检查列表,在这种情况下,我想要添加这个错误实例的根本原因: 未能将“ import os”添加到您的 setings.py 文件中。

具体来说,我们的团队中有一个开发人员,他打算删除一个不需要的包,而是从生产 setings.py 文件的顶部删除了“ import os”。在 apache 重新启动后,我们的应用程序无法重新启动,并且我们收到了可怕的“ RuntimeError: popula () isn’t reentrant”错误。

快速的‘ python management. py check’没有发现问题,但‘ python setings.py’发现了问题; 操作系统包没有加载。

如果出现此错误,请将搜索重点放在检查 setings.py 文件和 WSGI 文件上。

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

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

应用程序定义

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

应用程序定义

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

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

我最近在 django 项目[ Django1.11]中出现了同样的错误。

问题是,我的应用程序不再生活在非标准的 django 位置,通常应用程序生活在根项目目录

我最近将我的应用程序移动到一个应用程序文件夹,以便记录日志,但是我忘了更新我的模板。

我的结构[ ./Awesome _ 薯/apps/first _ app/]

因此,当我启动一个新的应用程序时,会发生的情况是 django 不会在 apps.py 文件或任何 python 文件中预置 dir 名称,因为这个模板已经过时了

Apps.py

name = 'first_app'

修复[更新我的模板后]

name = 'apps.first_app'

我不愿意把这个作为一个答案,因为它实际上只是一个相关案件的描述。然而,它看起来并不像一个评论那样清晰。

我在创建一个函数时遇到了这个错误,该函数可以在不运行服务器的情况下访问 Django 数据库。大多数情况下,这是用于插入测试数据条目。

我的项目在 project/apps/app_one/functions.py文件中有以下内容:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings")
import django
django.setup()

这允许在不运行服务器的情况下通过 Python 脚本访问 Django 数据库。这里有更多关于这种方法的信息: https://stackoverflow.com/a/26875729/4573162

我还在这个文件中保留了基本的应用程序功能,这些功能不需要数据库访问权限,而是在服务器运行时使用。例如,在我的 app_one.models.py中,我可能使用了从 app_name/functions.py文件导入的 functions.arg_format函数:

def save(self, *args, **kwargs):
self.some_arg = functions.arg_format(self.some_arg)
super().save(*args, **kwargs)

这就意味着我的应用程序在运行时试图再次运行 Django setup()

我不知道 怎么做相关这是,但它抛出了相同的 RuntimeError: populate() isn't reentrant错误,直到我创建了一个单独的文件,所有的数据库访问功能。在回避了额外的 setup()导入之后,迁移就可以按预期完成了。

RuntimeError: populate() isn't reentrant

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

诀窍是在 RuntimeError之前查看错误消息。在您的例子中,在第15行的文件/add/www/htmlquots/quote _ 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

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

为了揭示真正的问题,打开 django/apps/registry.py和第80行左右,替换:

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

与:

self.app_configs = {}

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

我因为几个不同的原因遇到了这个错误。有一次是因为我的一个应用程序的 admin.py 导入错误。

把我的理由加到清单上。 对我来说,这是因为我有一个名为 django 的服务,其目录与一个进程目录相同。重命名进程/目录修复了这个问题。

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

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

所以,当姜戈被陷害的时候千万不要试图陷害他。

为我重新启动 Apache 服务器解决了这个问题 $sudo 服务 apache2重新启动

关于 AWS Elastic Bean 的注意事项: Django-admin 编写的默认 settings.py包含对本地 sqlite 数据库的引用作为数据源。这可能适用于您的本地操作系统,但不适用于 AWS EB,并且会给出 populate() isn't reentrant运行时错误。要测试这一点,只需注释掉 settings.py中的 DATABASES={<...>}语句,然后部署并重新打开应用程序。

我也遇到过同样的问题,对我有效的方法是在/setings.py 中注释掉默认的数据库设置。我还了解到,django 的后续版本与 ebs 不兼容

对我来说,这个错误是 Requments.txt 文件中缺少一个 mysqlclient包。

首先,我安装了 mysqlclient软件包:

pip install mysqlclient

然后我用以下代码更新了 requments.txt 文件:

pip freeze > requirements.txt

这解决了我的问题。

如果您在开发环境中测试了语法,并且一切正常,那么问题就在这里

WSGIDaemonProcess celeryEnv python-path=/var/www/celeryEnv/lib/python3.6/site-packages user=apache group=apache python-home=/var/www/celeryEnv

阿帕奇只看

python-path=/var/www/celeryEnv/lib/python3.6/site-packages

所以 Lib64中的任何模块在 apache 中都不能被识别

我在 /var/www/celeryEnv/lib64中找到了 处理所有模块的变通方法 到 /var/www/celeryEnv/lib

现在 Apache 可以工作了,这是我自己服务器的线路

WSGIDaemonProcess domain.com python-path=/home/user/app/env/lib/python3.6/site-packages:/home/user/app

注意: 这里已经有了有益的信息,但是我把这个答案放在这里,因为我的服务器大部分都是 Centos-7,它们和我的答案一样正常工作!

在 apps.py 中,我设置了与应用程序名不同的名称。

对我来说,问题出在 SQLite 的版本上,我切换到 MySQL,一切都运行良好。 附言: 我使用的是 Namecheap 的共享主机,所以为了安装 mysqlclient 我必须联系支持。

RuntimeError: popular ()不是可重入的

这个 Django 错误主要是由于错误的导入导致的,并且在大多数情况下,您尝试导入一个模块两次