Populate() 不是可重入的 Django Google App Engine

Posted

技术标签:

【中文标题】Populate() 不是可重入的 Django Google App Engine【英文标题】:Populate() isn't reentrant Django Google App Engine 【发布时间】:2016-09-06 09:31:51 【问题描述】:

我正在运行谷歌应用引擎、python 2.7,并导入 Django 1.8。拉入python-firebase(-e git://github.com/ozgur/python-firebase.git#egg=python-firebase)后,出现以下错误

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
   File "/base/data/home/apps/s~trac-us/1.392706776803493304/main.py", line 25, in <module>
application = django.core.wsgi.get_wsgi_application()
   File "/base/data/home/apps/s~trac-us/1.392706776803493304/libs/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
   File "/base/data/home/apps/s~trac-us/1.392706776803493304/libs/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
      File "/base/data/home/apps/s~trac-us/1.392706776803493304/libs/django/apps/registry.py", line 78, in populate
raise RuntimeError("populate() isn't reentrant")
  RuntimeError: populate() isn't reentrant

许多其他解决方案都建议更改 wsgi.py 文件,因为 django 会在部署之前安装在 requirements.txt 文件中。

最终这会导致服务器声明:“错误:服务器错误 服务器遇到错误,无法完成您的请求。 请在 30 秒后重试。”我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,删除 sqlite 数据库连接的数据库配置为我解决了这个问题。问题可能是 django 在下面寻找的 sqlite 库不存在,因此,删除 sqlite 配置为我修复了该问题。 pff,我没有在那个项目中使用 sqlite。

但是,根据我登陆的 google groups 线程,错误:

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

是当您尝试加载的应用程序之一导致其中的错误时导致的。我将在此处提供该主题的链接,尽管它与您的问题不同(您可能已经解决了),但您仍然可能会发现它很有用:

Link 分组线程

The answer我在说

希望你觉得它有用。

【讨论】:

以上是关于Populate() 不是可重入的 Django Google App Engine的主要内容,如果未能解决你的问题,请参考以下文章

可重入锁的获取和释放须要注意的一点儿事

如何判断一个函数是不是可重入

具有多个命令和可重入的 BASH 变量

线程安全和可重入函数

dispatch_queue_set_specific可重入的gcd

可重入与线程安全