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

124

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

Поиск в Google этого сообщения об ошибке возвращает на удивление мало информации, ни одной из документации 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
Нет, удаление всех файлов .pyc не помогло. Прикосновение wsgi.pyк той же ошибке Apache, и файлы .pyc не создаются заново.
Эдвард
1
Вы пробовали перезапустить Apache?
dukebody
Я не могу перезапустить Apache, потому что у меня нет прав на этом сервере. Администратор с root-доступом вернется в офис только в понедельник.
Эдвард
В моем случае это не было установлено приложение из INSTALLED_APPS в среде.
maciek

Ответы:

100

Это вызвано ошибкой в ​​ваших настройках Django. К сожалению, Django скрывает ошибку за этим общим и бесполезным сообщением об ошибке.

Чтобы выявить истинную проблему, откройте django/apps/registry.pyстроку 80 и замените:

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

с участием:

self.app_configs = {}

Это позволит Django продолжить загрузку и выявить фактическую ошибку.

Я столкнулся с этой ошибкой по нескольким причинам. Однажды из-за того, что у меня был плохой импорт в одном из моих приложений admin.py.

Cerin
источник
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
Этот ответ - чистое золото.
xpanta
2
@RickyA, и это был, безусловно, самый полезный комментарий, поскольку мне даже не пришлось беспокоиться об этом ответе, я просто попробовал pip install --upgrade psycopg2и исправил его.
Пользователь
65

Администратор моего сервера перезапустил 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.

Эдвард
источник
8
Для меня проблема заключалась не в переносе изменений, которые я внес в модель в одном из моих приложений.
user2662692
Хорошо, у меня почти такая же проблема, и да, она исправляется при перезагрузке машины и перезапуске сервера. Но проблема повторяется. Иногда внезапно. в течение месяца это произошло трижды. Если у кого-нибудь есть идеи, пожалуйста, помогите.
Rohit
@Rohit, если вам нужна помощь в вашей ситуации, вам, вероятно, стоит опубликовать новый вопрос с ее описанием. В комментариях вы вряд ли получите ответ.
Эдвард
4
В startup-timeoutболее поздних версиях mod_wsgi есть опция для режима демона mod_wsgi, которая помогает в восстановлении после временных ошибок, когда Django инициализируется, например, когда база данных недоступна. Тайм-аут приведет к автоматическому перезапуску процесса, если приложение WSGI не загрузится должным образом после периода тайм-аута. Даже это не поможет, если у вас есть постоянная проблема с вашим собственным кодом. В этом случае ищите самую первую ошибку, а не populate()ошибку, поскольку она укажет реальную причину сбоя вашего кода.
Грэм Дамплтон
1
Что вы имеете в виду «wsgi.py проекта Django с этой простой функцией»? Как заменить файл функцией?
Cerin
46

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

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

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

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

Хесус Гомес
источник
2
Я получаю ошибку 500 на Apache и не могу найти проблему. По этой команде manage.py checkя обнаружил проблему. Спасибо.
Али Хесари
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")ошибка.

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

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

$ touch settings.py

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

seddonym
источник
2

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

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

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

Behzad
источник
2

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

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

Хосе Л. Патиньо
источник
2

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

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

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi
Питер
источник
2

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

webbyfox
источник
1

Установка: Ubuntu 14.04, Django 1.10, Python 3.5 (in virtualenv).

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

Затем я искал решения для ошибки запуска, и решение этого вопроса сработало для меня . Вкратце, это включает в себя обновление mod_wsgiпакета окольными путями.

В течение нескольких месяцев я получал предупреждения о несоответствии mod_wsgiверсий, но внезапно это привело к ошибке Apache 500's. Для меня это не имеет никакого смысла.

Я предполагаю, что эта 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'
CoderGuy123
источник
Создайте новый вопрос. Не задавайте вопросы вместо ответов.
Грэм Дамплтон,
1
Я не задаю вопрос. Публикация решения той же проблемы, которая сработала для меня. Apache выдает ошибку 500, и ошибка в файле журнала такая же, как и в вопросе, заданном здесь. Пожалуйста, перечитайте мой ответ. :)
CoderGuy123
Затем включите реальное решение в свой ответ, а не ссылайтесь на другой вопрос. Проблема в том, что в другом сообщении проблема вообще не упоминается, populate()и мне кажется, что это совершенно другая проблема, поэтому я не понимаю, как вы думаете, что она решала ту же проблему. Итак, насколько кто-либо может сказать, у вас была другая проблема, для которой вы должны были задать отдельный вопрос с самого начала, а не путать ответы здесь на то, что выглядит как другая проблема, основанная на деталях в том другом сообщении ..
Грэм Дамплтон
Здесь нет необходимости повторять шаги. Ошибки появляются в том же журнале, просто OP здесь не все. Одна ошибка отображается при доступе к странице (это часть в OP здесь), другая при запуске Apache (это часть в другом потоке).
CoderGuy123
1

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

Ad Astra
источник
У нас была такая же проблема с CentOS 7 и SELinux. Мы исправили это, chconизменив контекст проблемного .soфайла на httpd_sys_script_exec_t .
Джон
1

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

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

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

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

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

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

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
Попелуч
источник
1

Примечание по AWS Elastic Beanstalk: значение по умолчанию settings.py, записанное Django-admin, включает ссылку на локальную базу данных sqlite в качестве источника данных. Скорее всего, это будет работать в вашей локальной ОС, но не в AWS EB, и приведет к populate() isn't reentrantошибке выполнения. Чтобы проверить это, просто закомментируйте DATABASES={<...>}оператор settings.py, разверните и снова откройте приложение.

Начинающий пользователь AWS EB
источник
Это происходит, например, при развертывании на AWS EB с использованием Django версии 2.2 (или более поздней) с базой данных sqlite по умолчанию. За вами 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 () не повторяется")

Он отлично работал в моей среде разработки 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

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

Фарид Эль-Насир
источник
0

Добавление моей причины в список. Для меня это было потому, что у меня была служба django с тем же каталогом, что и каталог процесса. Переименование процесса / каталога устранило проблему.

отметка
источник
0

У меня была рекурсия django.setup(), например, я пытался написать django.setup()внутри an app/models.py, в трассировке стека django пытался указать на это рядом:

... "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

Для меня перезапуск сервера Apache решил проблему. Вы можете сделать это с помощью команды $ sudo service apache2 restart

Шивам Кохли
источник
0

У меня была такая же проблема, у меня сработало комментирование настроек базы данных по умолчанию в / settings.py. Я также читал, что более поздние версии django несовместимы с ebs

Стив Бьен-Эйм
источник
0

Для меня ошибка заключалась в отсутствии mysqlclientпакета в файле requirements.txt.

Сначала я установил mysqlclientпакет с:

pip install mysqlclient

затем я обновил файл requirements.txt следующим образом:

pip freeze > requirements.txt

и это решило мою проблему.

Абдулвахаб Альхенди
источник
-1

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

Луис Карлос Мехиа
источник
-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

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

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

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