Django перестает работать с RuntimeError: populate () не реентерабелен

74

Я разрабатываю веб-приложение Django, развернутое на сервере Apache с WSGI, и все идет гладко. Сегодня я внес некоторые незначительные изменения в мое приложение 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 из-за ошибки синтаксиса в моем 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.

  • 1
    Я бы попытался удалить все файлы .pyc, которые могут быть рядом.
  • 0
    Нет, удаление всех файлов .pyc не помогло. Прикосновение к wsgi.py приводит к той же ошибке Apache, и файлы .pyc не воссоздаются.
Показать ещё 5 комментариев
Теги:
mod-wsgi
django-wsgi

28 ответов

51
Лучший ответ

Мой администратор сервера перезапустил 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"]

Затем я перезагружаю свой сайт, и процесс daemon WSGI перезапускается (что я могу сказать, просмотрев журнал Apache, хотя на веб-сайте все еще отображается такая же ошибка 500).

Если я затем сменил wsgi.py на нормальный и снова перезагрузился, WSGI успешно заберет мой код, не выбрасывая populate() isn't reentrant (предполагая, что на этот раз у меня нет синтаксических ошибок). Таким образом, все Apache не нужно перезапускать, просто процесс WSGI, и я могу сделать это без привилегий root.

  • 6
    Для меня проблема не заключалась в переносе изменений, которые я внес в модель в одном из моих приложений.
  • 0
    Хорошо, я столкнулся почти с той же проблемой, и да, это исправлено после перезагрузки компьютера и перезапуска сервера. Но проблема повторяется. Иногда внезапно. в течение месяца это произошло трижды. Если у кого-нибудь есть идеи, пожалуйста, помогите.
Показать ещё 5 комментариев
27

Я знаю, что это старый ответ, но я буду вносить свой вклад в мое решение:

В качестве способа диагностики источника проблемы запустите manage.py check и посмотрите, найдёте ли что-нибудь там

В моем случае устаревшее требование было проблемой, и django не смог импортировать подмодуль

Убедитесь, что ваши требования обновлены

  • 2
    Я получаю ошибку 500 на Apache, и я не могу найти проблему. С помощью этой команды manage.py check я обнаружил проблему. Спасибо.
9

Если вы получаете эту ошибку при использовании 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").

  • 0
    Это объясняет, почему все работало нормально локально, но получило ошибку 500 при развертывании в GAE. Небольшая подсказка: при поиске текста «повысить» на странице журнала GAE было получено одно попадание, которое привело к сообщению об ошибке, указанному donturner. Его решение спасло мой день :-)
4

Возможно, вы сможете исправить это, не перезапуская Apache, коснувшись файла (кроме wsgi.py), который находится на ранней стадии процесса загрузки. Например, ваш файл настроек:

$ touch settings.py

Я тоже не правильно решил это, но больше информации в моем вопросе здесь: Мониторинг смены кода не работает с Django 1.7 на mod-wsgi

4

Это не ответ, а рефлексия.

Когда вы обновляетесь до django 1.7 и у вас появляется ошибка 500 и вы перезагружаете страницу, Apache говорит: "populate() не реентерабелен". Я думаю, что когда вы загружаете свою страницу, Apache загружает все модули, которые вам нужны для вашего приложения, и когда ошибка обрабатывается, он не выгружает модуль. Итак, когда вы перезагружаете свою страницу, apache загружает снова эти модули, но он уже загружен. Итак, apache говорит: "populate() не является повторно входящим".

У меня есть два действия, чтобы исправить это: перезапустить apache или исправить ошибку, которая обработала первую ошибку 5OO.

Я надеюсь, что это поможет вам.

3

Apache хранит файл wsgi в кеше. Отключить кеширование Apache файлов python

Итак, сначала удалите файл wsgi и перезагрузите acpache, а затем снова добавьте wsgi файл и перезапустите apache.

3

Это выглядит как хорошая коллекция действительных ответов для одной и той же ошибки Apache mod-wsgi, каждый парень публикует ту, которая работает для него/нее, поэтому вот моя:

Не забудьте обновить требования к проекту после развертывания:)

3

У меня возникла та же проблема, и источником ошибки для меня была просто синтаксическая ошибка в файле, с которым я работал. После исправления опечатки в populate() is not reentrant ошибка populate() is not reentrant исчезла.

Если вы запускаете django из скрипта wsgi, вы можете определить опечатку, просто запустив скрипт wsgi из командной строки. Например:

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

Я знаю, что прошло некоторое время с тех пор, как был задан этот вопрос, но я просто столкнулся с этой проблемой из-за проблемы, которую я не видел здесь. Я получил ошибку RuntimeError: populate() isn't reentrant из-за SELinux на CentOS 7. Я использовал Django из домашнего каталога, и мне просто пришлось включить SELinux boolean, что позволило читать домашние каталоги, поскольку ошибка populate() была вызвана разрешений. Решение для меня было setsebool -P httpd_read_user_content 1. Надеюсь, это поможет кому-то, кто имеет эту проблему.

  • 0
    У нас была такая же проблема с CentOS 7 и SELinux. Мы исправили это, используя chcon чтобы изменить контекст .so файла проблемы на httpd_sys_script_exec_t .
2

Настройка: 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'
  • 0
    Создать новый вопрос. Не задавайте вопросы в качестве ответов.
  • 1
    Я не задаю вопрос. Выкладываю решение той же проблемы, что и у меня. Apache выдает ошибку 500, и ошибка в файле журнала такая же, как и в вопросе, заданном здесь. Пожалуйста, перечитайте мой ответ. :)
Показать ещё 2 комментария
2

Я столкнулся с одной и той же проблемой, поэтому начал оглядываться.

Теперь у меня это работает, поэтому я решил поделиться с вами ребятами!

Все, что я сделал, это сделать chown user:group /to/path -R и chmod 770 /to/path -R снова и снова.

1

Множество ответов проясняет это; Это общая ошибка, которая может иметь несколько основных причин, обычно связанных с загрузкой Apache/WSGI.

Все эти ответы на этой странице должны быть своего рода контрольным списком, и в этом ключе я хочу добавить основную причину моего экземпляра этой ошибки: не удалось добавить "import os" в ваш файл settings.py.

В частности, в нашей команде был разработчик, который намеревался удалить ненужный пакет, а вместо этого удалил "import os" из верхней части рабочего файла settings.py. После перезапуска Apache наше приложение не перезапустилось, и мы получили страшную ошибку "RuntimeError: populate() not reentrant".

Быстрая проверка python manage.py не выявила проблему, но появилась python settings.py; пакет ОС не был загружен.

Если у вас есть эта ошибка, сфокусируйте свой поиск на проверке ваших файлов settings.py, а также файла WSGI.

  • 1
    Что еще более важно, убедитесь, что вы вернулись в журнал ошибок и искали самое первое сообщение об ошибке, которое появляется после перезапуска одного из процессов демона Apache или mod_wsgi. Эта первая ошибка скажет вам истинную причину ошибки, любые запросы после этого для того же процесса будут упоминать только reentrant ошибку. В режиме демона также убедитесь, что вы используете опцию времени startup-timeout если у вас есть эта проблема из-за временных ошибок, а не ошибок кодирования. По крайней мере, таким образом он может автоматически восстановиться.
  • 0
    Это правильный ответ, ошибка является общей, проверьте сообщение непосредственно перед runtimeerror.
1

В моем случае ошибка возникла из-за отсутствия требуемого пакета pip.

Итак, я сделал pip install -r requirements.txt, перезапустил apache и все снова работало.

1

В моем случае у меня был custom renderer class для Django Rest Framework, для какой-то цели мне пришлось переопределить метод класса renderer "get_context" (полное раскрытие: сделать django toolbar корректным подсчет запросов SQL)

Я удалил этот класс и перераспределил его. Это сработало.

1

Это также может быть вызвано дублированием записи в INSTALLED_APPS

1

Я входил в эту же ошибку после изменения порядка этого параметра:

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, исправил проблему.

1

У меня была эта проблема, и я не мог найти ответ, почему, пока я не отменил свои обязательства. По-видимому, я добавил случайный импорт из-за автозаполнения, который прикрутил настройку.

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

В журнале ошибок apache: RuntimeError ( "populate() не является реентерабельным" )

Он отлично работал в моей среде Windows, но не удался на сервере ubuntu/apache.

0

RuntimeError: populate() isn't reentrant

Может быть что угодно, поэтому на этот вопрос так много разных ответов.

Хитрость заключается в том, чтобы посмотреть на сообщение об ошибке непосредственно перед RuntimeError. В вашем случае, кажется, есть синтаксическая ошибка в файле /extra/www/htmlquotes/quotes_django/quotespage/admin.py в строке 15, смотрите:

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
0

Эта ошибка также генерируется при несовместимости использования пробела и табуляции в коде.

0

Я думаю, что это общая ошибка, когда что-то не так с settings.py. Иногда я могу найти проблему методом проб и ошибок, удаляя установленные приложения по одному. В некоторых случаях это не относится к установленным приложениям. Но по моему опыту, во всех случаях это проблема в файле settings.py.

0

Удаление каталога virtualenv, воссоздание virtualenv, а затем переустановка всех требований устранили его для меня.

0

Я решил проблему с добавлением __init__.py в папку моих приложений.

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

Тогда это сработало!

0

В моем случае у меня был циклический импорт, который вызывает ошибку, которая разрушает метод заполнения.

-1

Я не решаюсь добавить это как ответ, так как на самом деле это просто описание соответствующего случая. Тем не менее, это не казалось разборчивым в качестве комментария.

Я столкнулся с этой ошибкой при создании функции, которая могла бы получить доступ к базе данных Django без запуска сервера. В основном это использовалось для вставки записей тестовых данных.

У моего проекта в файле project/apps/app_one/functions.py:

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

Это позволяет получить доступ к базе данных Django через скрипты Python без запуска сервера. Смотрите здесь для получения дополнительной информации об этом подходе: https://stackoverflow.com/questions/8047204/django-script-to-access-model-objects-without-using-manage-py-shell

В этом файле я также держал основные функции приложения, которые не требовали доступа к базе данных и должны были использоваться во время работы сервера. Например, в моем app_one.models.py меня может быть следующее использование functions.arg_format functions.arg_format, импортированной из файла app_name/functions.py:

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

Это означает, что мое приложение во время работы пыталось снова запустить программу setup() Django setup().

Я не знаю, как это связано, но он RuntimeError: populate() isn't reentrant ту же RuntimeError: populate() isn't reentrant ошибкой, пока я не создал отдельный файл для всех функций доступа к базе данных. После того, как дополнительный импорт setup() был отменен, миграция могла быть завершена, как и ожидалось.

-1

проверьте, упоминали ли вы свои имена API дважды в разделе установленного приложения settings.py.

Определение приложения

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

Определение приложения

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

Удаление повторяющихся записей решило мою проблему

  • 0
    но в учебнике написано INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
  • 0
    @ming Это необязательно.
-2

Недавно у меня была такая же ошибка в моем проекте django [Django1.11].

Проблема заключалась в том, что мои приложения больше не живут в нестандартном месте django, обычно приложения живут в корневом каталоге проекта.

Я недавно переместил свои приложения в папку приложений для целей регистрации, но забыл обновить свои шаблоны.

Моя структура [./awesome_potatoes/apps/first_app/]

Поэтому, когда я запускаю новое приложение, происходит следующее: django не добавляет имя dir в файл apps.py или в любой файл python в этом отношении из-за устаревшего шаблона.

apps.py

name = 'first_app'

Исправить [после обновления моих шаблонов]

name = 'apps.first_app'

-2

Чтобы добавить 2 евро цента:

Я воссоздал рабочую настройку в Docker. Новая настройка Docker не удалась с

populate isn't reentrant

которая кажется общей ошибкой. В моем случае я упустил из виду, что

pip install Django

устанавливает последнюю версию (2.0) вместо требуемой версии 1.11. Меняя это на

pip install Django==1.11

исправил мою проблему.

-4

Эта проблема отсутствия памяти на вашем ПК/хосте/VPS, освободите память и все будет в порядке.

  • 2
    Вы отправили один и тот же ответ на три вопроса . Пожалуйста, адаптируйте каждый ответ на вопрос.
  • 0
    Почему отрицательные голоса? Это был правильный ответ для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню