Django berhenti bekerja dengan RuntimeError: populate () bukan reentrant

123

Saya telah mengembangkan aplikasi web Django yang disebarkan pada server Apache dengan WSGI, dan semuanya berjalan lancar. Hari ini, saya membuat beberapa perubahan kecil pada aplikasi saya admin.pydalam upaya untuk menyesuaikan antarmuka Admin Django bawaan, dan awalnya membuat kesalahan sintaks (tanda kurung tidak tertutup). Ini berarti bahwa ketika saya menyentuh wsgi.pydan memuat kode (saya menjalankan WSGI dalam mode daemon di host virtual saya), situs web saya diganti dengan Kesalahan Server Internal karena WSGI berhenti ketika terjadi kesalahan sintaksis.

Jadi saya memperbaiki kesalahan sintaks, memeriksa bahwa saya tidak memilikinya lagi manage.py check, dan menyentuh wsgi.pyuntuk menerapkan ulang. Tetapi situs web saya masih menampilkan Kesalahan Server Internal! Memeriksa log Apache, inilah yang saya lihat:

[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

Rangkaian kesalahan pertama menunjukkan WSGI gagal karena kesalahan sintaks di my admin.py. Namun demikian, rangkaian kesalahan kedua tampaknya memperlihatkan kesalahan internal ke Django:

RuntimeError: populate() isn't reentrant

terlempar dari populatemetode registry.py.

Googling pesan kesalahan ini mengembalikan sangat sedikit informasi, tidak satupun darinya dari dokumentasi Django. Rupanya, hal itu terkadang bisa terjadi jika Anda menamai aplikasi dua kali di aplikasi Anda settings.py, tetapi saya tidak melakukannya. Lebih penting lagi, saya belum berubah settings.pysejak titik di mana situs web berfungsi dengan baik - satu-satunya hal yang saya ubah adalah admin.py.

Saya mencoba mengembalikan semua perubahan yang saya buat, jadi semua kode Python saya kembali ke keadaan semula ketika situs web berfungsi - dan saya masih mendapatkan populate() isn't reentrantkesalahan ketika saya mencoba membuat WSGI memuat ulang kode!

Saya juga mencoba mengomentari aplikasi yang berbeda di bagian INSTALLED_APPS settings.py, dan bahkan dengan hanya 'django.contrib.staticfiles' yang diaktifkan, kesalahan masih terjadi. Anehnya, saya masih mendapatkan kesalahan meskipun saya mengomentari semua aplikasi - Django melempar kesalahan bahkan ketika tidak memuat aplikasi apapun!

Apakah ada yang tahu apa yang terjadi di sini? Atau ada cara yang lebih baik bagi saya untuk men-debug kesalahan ini, karena penelusuran kembali di log Apache cukup tidak membantu?

Catatan: Saya menggunakan Django 1.7, Apache 2.2, dan Python 2.7.

Edward
sumber
2
Saya akan mencoba menghapus semua file .pyc yang mungkin ada.
dukebody
Tidak, menghapus semua file .pyc tidak membantu. Menyentuh wsgi.pymenghasilkan kesalahan Apache yang sama, dan file .pyc tidak dibuat ulang.
Edward
1
Sudahkah Anda mencoba memulai ulang Apache?
dukebody
Saya tidak dapat memulai ulang Apache karena saya tidak memiliki hak atas server ini. Administrator dengan akses root tidak akan kembali ke kantor hingga hari Senin.
Edward
Dalam kasus saya itu tidak menginstal aplikasi dari INSTALLED_APPS di lingkungan.
maciek

Jawaban:

99

Ini disebabkan oleh bug dalam pengaturan Django Anda di suatu tempat. Sayangnya, Django menyembunyikan kutu di balik pesan galat yang umum dan tidak berguna ini.

Untuk mengungkap masalah sebenarnya, buka django/apps/registry.pydan sekitar baris 80, ganti:

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

dengan:

self.app_configs = {}

Ini akan mengijinkan Django untuk melanjutkan memuat, dan mengungkapkan kesalahan sebenarnya.

Saya mengalami kesalahan ini karena beberapa penyebab berbeda. Dulu karena saya mengalami impor yang buruk di salah satu aplikasi saya admin.py.

Cerin
sumber
22
Sejauh ini, ini adalah jawaban paling berguna di utas ini. Sekarang saya tahu ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA
2
Menyelamatkan hidupku. Solusi ini memungkinkan saya untuk berhasil memeriksa persyaratan yang hilang dan kesalahan kompatibilitas di antara mereka.
Ángel Jiménez
1
Ini sempurna. Mengubah satu baris itu membuat saya melihat saya mengalami kesalahan impor sederhana. Saya tidak tahu apa yang terjadi sebelumnya.
Yakobus
4
Jawabannya adalah emas murni.
xpanta
2
@RickyA dan ini adalah komentar yang paling berguna karena saya bahkan tidak perlu repot dengan jawaban ini dan hanya mencoba pip install --upgrade psycopg2dan memperbaikinya.
Pengguna
65

Administrator server saya memulai ulang Apache, dan itu secara ajaib memperbaiki masalah ini. File Python yang sama persis dimuat tanpa menyebabkanpopulate() isn't reentrant . Saya bahkan mencoba memuat file lain dengan kesalahan sintaksis, lalu memperbaikinya, dan server dapat memuat file baru dan berjalan dengan benar tanpa masalah.

Saya masih tidak tahu apa yang salah, tapi saya tandai ini sebagai jawaban karena masalahnya sudah hilang. (Yah, saya akan menandainya sebagai dijawab segera setelah StackOverflow mengizinkan saya menerima jawaban saya sendiri.)

Pembaruan : Setelah terus mendapatkan kesalahan ini ketika saya tidak sengaja mengunggah Python dengan kesalahan sintaks, saya menemukan solusi yang lebih mudah daripada memulai ulang Apache. Ketika WSGI mulai membuat populate() isn't reentrantkesalahan, saya mengganti proyek Django saya wsgi.pydengan fungsi sederhana ini:

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

Kemudian saya memuat ulang situs web saya, dan proses daemon WSGI dimulai ulang (yang dapat saya ketahui dengan melihat log Apache, meskipun situs web tersebut masih menampilkan kesalahan 500 yang sama).

Jika saya kemudian mengubah wsgi.pykembali ke normal dan memuat ulang lagi, WSGI berhasil mengambil kode saya tanpa membuang populate() isn't reentrant(dengan asumsi saya tidak memiliki kesalahan sintaks saat ini). Jadi keseluruhan Apache tidak perlu dimulai ulang, cukup proses WSGI, dan saya dapat melakukannya tanpa hak akses root.

Edward
sumber
8
Bagi saya masalahnya bukan memigrasi perubahan yang saya buat ke model di salah satu aplikasi saya.
pengguna2662692
Oke, saya menghadapi masalah yang hampir sama dan ya itu diperbaiki saat me-reboot mesin dan memulai ulang server. Tapi masalahnya terus berulang. Terkadang tiba-tiba. dalam sebulan sudah terjadi tiga kali. Jika ada yang punya ide, tolong bantu.
Rohit
@Rohit, jika Anda ingin bantuan dengan situasi Anda, Anda mungkin harus memposting pertanyaan baru yang menjelaskannya. Anda tidak mungkin mendapatkan jawaban di komentar di sini.
Edward
4
Ada startup-timeoutopsi untuk mode daemon mod_wsgi dalam versi mod_wsgi yang lebih baru yang membantu dalam memulihkan dari kesalahan sementara ketika Django sedang dijalankan, seperti database tidak tersedia. Batas waktu akan menyebabkan proses dimulai ulang secara otomatis jika aplikasi WSGI tidak memuat dengan benar setelah jangka waktu habis. Bahkan itu tidak akan membantu jika Anda memiliki masalah permanen dengan kode Anda sendiri. Dalam hal ini, cari kesalahan pertama, bukan populate()kesalahan karena itu akan memberikan alasan sebenarnya kode Anda gagal.
Graham Dumpleton
1
Apa maksud Anda "proyek Django wsgi.py dengan fungsi sederhana ini"? Bagaimana Anda mengganti file dengan fungsi?
Cerin
46

Saya tahu ini adalah jawaban lama tetapi saya akan berkontribusi dengan solusi saya:

Sebagai cara untuk mendiagnosis sumber masalah yang dijalankan manage.py check dan lihat apakah Anda menemukan sesuatu di sana

Dalam kasus saya, persyaratan yang sudah ketinggalan zaman adalah masalahnya dan django gagal mengimpor submodul

Pastikan bahwa persyaratan Anda mutakhir

Yesus Gomez
sumber
2
Saya mendapatkan Error 500 di Apache dan saya tidak dapat menemukan masalahnya. Dengan perintah ini manage.py checksaya menemukan masalahnya. Terima kasih.
Ali Hesari
13

Ini bukan respon tapi refleksi.

Ketika anda mengupgrade ke django 1.7 dan anda mendapatkan kesalahan 500 dan memuat ulang halaman anda, Apache berkata "populate () tidak reentrant". Saya pikir ketika Anda memuat halaman Anda, Apache memuat semua modul yang Anda butuhkan untuk aplikasi Anda dan ketika kesalahan ditangani, itu tidak membongkar modul. Jadi, ketika Anda memuat ulang halaman Anda, apache memuat lagi modul-modul ini tetapi sudah dimuat. Jadi, Apache mengatakan "populate () tidak reentrant".

Saya memiliki dua tindakan untuk memperbaikinya: Mulai ulang apache, atau perbaiki kesalahan yang menangani kesalahan 5OO pertama.

Coba mulai ulang apache dengan:

sudo service httpd restart

Saya harap ini akan membantu Anda.

Vianney Thurotte
sumber
10

Jika Anda mendapatkan kesalahan ini saat menggunakan Google App Engine, periksa log Anda untuk menemukan kesalahan lain yang mungkin menyebabkan hal ini. Saya mendapatkan:

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

Anda tidak dapat menggunakan SQLite dengan Google App Engine jadi mengomentari DATABASESbagian settings.pymenghentikan kesalahan itu dan juga RuntimeError("populate() isn't reentrant")kesalahan tersebut.

donturner
sumber
Ini menjelaskan mengapa semuanya bekerja dengan baik secara lokal tetapi mendapat kesalahan 500 saat diterapkan ke GAE. Petunjuk kecil: menelusuri teks "naikkan" pada halaman log GAE menghasilkan satu klik persis yang mengarah ke pesan kesalahan yang ditunjukkan oleh donturner. Solusinya menyelamatkan hari saya :-)
Golden Thumb
4

Anda mungkin dapat memperbaikinya tanpa memulai ulang Apache dengan menyentuh file (selain wsgi.py) yang ada di awal proses pemuatan. Misalnya, file pengaturan Anda:

$ touch settings.py

Saya juga belum menyelesaikan ini dengan benar, tetapi info lebih lanjut dalam pertanyaan saya di sini: Pemantauan perubahan kode tidak berfungsi dengan Django 1.7 pada mod-wsgi

seddonim
sumber
2

Saya baru saja menghadapi masalah yang sama jadi saya mulai melihat-lihat.

Sekarang saya sudah membuatnya berfungsi, jadi saya pikir saya harus membaginya dengan kalian!

Yang saya lakukan hanyalah melakukannya chown user:group /to/path -Rdan chmod 770 /to/path -Rlagi dan itu berhasil.

Behzad
sumber
2

Ini tampak seperti kumpulan respons valid yang bagus untuk kesalahan Apache mod-wsgi yang sama, setiap pria memposting yang berfungsi untuknya, jadi ini milik saya:

Jangan lupa untuk memperbarui persyaratan proyek Anda setelah menerapkan :)

José L. Patiño
sumber
2

Saya mengalami masalah yang sama, dan sumber kesalahan bagi saya hanyalah kesalahan sintaks pada file yang saya kerjakan. Setelah memperbaiki kesalahan ketik, populate() is not reentrantkesalahan tersebut menghilang.

Jika anda menjalankan django dari skrip wsgi, anda mungkin dapat mengenali kesalahan ketik hanya dengan menjalankan skrip wsgi dari baris perintah. Sebagai contoh:

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

Kesalahan ini juga dihasilkan jika tidak konsistennya penggunaan spasi dan tab dalam kode.

webbyfox
sumber
1

Pengaturan: Ubuntu 14.04, Django 1.10, Python 3.5 (dalam virtualenv).

Saya mencoba banyak solusi ini tanpa hasil, tetapi kemudian saya perhatikan bahwa log kesalahan Apache berisi dua kesalahan berbeda dalam kasus saya. Satu yang terjadi ketika seseorang mencoba mengunjungi halaman, yang lain terjadi saat memulai. Saya melewatkan startup yang satu karena saya biasanya mencoba menyegarkan halaman beberapa kali dan dengan demikian hanya melihat kesalahan saat dikunjungi berulang beberapa kali.

Saya kemudian mencari solusi untuk kesalahan startup dan solusi untuk pertanyaan ini berhasil untuk saya . Singkatnya, ini melibatkan pembaruan mod_wsgipaket secara tidak langsung.

Saya telah menerima peringatan selama berbulan-bulan tentang ketidakcocokan dalam mod_wsgiversi, tetapi tiba-tiba itu mengakibatkan kesalahan Apache 500. Tidak masuk akal bagiku.

Dugaan saya adalah bahwa RuntimeError: populate() isn't reentrantkesalahan ini biasanya merupakan tanda bahwa seseorang harus mencari kesalahan startup, yang menunjukkan masalah sebenarnya.

sedang berkunjung

[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

memulai

[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
sumber
Buat pertanyaan baru. Jangan ajukan pertanyaan sebagai jawaban.
Graham Dumpleton
1
Saya tidak mengajukan pertanyaan. Memposting solusi untuk masalah yang sama yang berhasil untuk saya. Apache melempar kesalahan 500 dan kesalahan di file log sama dengan yang ada di pertanyaan yang ditanyakan di sini. Tolong baca ulang jawaban saya. :)
CoderGuy123
Kemudian sertakan solusi sebenarnya dalam jawaban Anda daripada tautkan ke pertanyaan lain. Masalahnya adalah bahwa posting lain tidak menyebutkan populate()masalah sama sekali dan bagi saya sepertinya masalah yang sama sekali berbeda, jadi saya tidak dapat melihat bagaimana menurut Anda itu menyelesaikan masalah yang sama. Sejauh yang orang tahu, Anda memiliki masalah berbeda yang seharusnya Anda ajukan pertanyaan terpisah pada awalnya daripada membingungkan tanggapan di sini untuk apa yang tampak seperti masalah berbeda berdasarkan detail di pos lain itu ..
Graham Dumpleton
Tidak perlu mengulangi langkah-langkah di sini. Kesalahan muncul di log yang sama, hanya saja OP di sini tidak menyertakan semuanya. Satu kesalahan ditampilkan ketika halaman diakses (itu bagian dalam OP di sini), kesalahan lain ketika Apache dimulai (itu bagian di utas lainnya).
CoderGuy123
1

Saya tahu sudah lama sejak pertanyaan ini diajukan, tetapi saya baru saja mengalami masalah ini karena masalah yang belum saya bahas di sini. Saya mendapatkan RuntimeError: populate() isn't reentrantkesalahan karena SELinux pada CentOS 7. Saya meminta Django dilayani dari direktori home, dan saya hanya perlu mengaktifkan SELinux boolean yang memungkinkan membaca direktori home, karena kesalahan populate () disebabkan oleh masalah perizinan. Solusi bagi saya adalah setsebool -P httpd_read_user_content 1. Saya harap ini membantu seseorang yang mengalami masalah ini.

Ad Astra
sumber
Kami memiliki masalah yang sama dengan CentOS 7 dan SELinux. Kami memperbaikinya dengan menggunakan chconuntuk mengubah konteks .sofile masalah menjadi httpd_sys_script_exec_t .
Jon
1

Banyaknya jawaban membuatnya jelas; ini adalah kesalahan umum yang dapat memiliki beberapa akar penyebab, biasanya terkait dengan memuat Apache / WSGI.

Semua jawaban di halaman ini harus berfungsi sebagai semacam daftar periksa, dan dalam hal itu saya ingin menambahkan akar penyebab dari kesalahan saya ini: kegagalan untuk menambahkan 'import os' ke file settings.py Anda.

Secara khusus, kami memiliki pengembang di tim kami yang bermaksud untuk menghapus paket yang tidak dibutuhkan, dan sebaliknya menghapus 'import os' dari bagian atas file production settings.py. Setelah apache dimulai ulang, aplikasi kami tidak akan dimulai ulang dan kami menerima kesalahan 'RuntimeError: populate () not reentrant' yang ditakuti.

Sebuah 'python manage.py check' cepat tidak mengungkapkan masalah, tapi 'python settings.py' melakukannya; paket os tidak dimuat.

Jika Anda mendapatkan kesalahan ini, fokuskan pencarian Anda untuk memeriksa file settings.py Anda dan juga file WSGI Anda.

Tom Halpin
sumber
3
Lebih penting lagi, pastikan Anda kembali ke log kesalahan dan mencari pesan kesalahan pertama yang muncul setelah memulai ulang salah satu proses daemon Apache atau mod_wsgi. Kesalahan pertama itu akan memberi tahu Anda alasan sebenarnya untuk kesalahan tersebut, permintaan apa pun setelah itu untuk proses yang sama hanya akan menyebutkan reentrantkesalahan. Dalam mode daemon, pastikan juga Anda menggunakan startup-timeoutopsi jika Anda mengalami masalah ini karena kesalahan sementara, daripada kesalahan pengkodean. Setidaknya dengan cara itu dapat pulih secara otomatis.
Graham Dumpleton
Ini adalah jawaban yang benar, kesalahannya umum, periksa pesan sebelum runtimeerror.
Popieluch
1

RuntimeError: populate() isn't reentrant

Bisa apa saja, itulah mengapa ada begitu banyak jawaban berbeda untuk pertanyaan ini.

Triknya adalah dengan melihat pesan kesalahan tepat sebelum RuntimeError. Dalam kasus Anda, tampaknya ada kesalahan sintaks pada file /extra/www/htmlquotes/quotes_django/quotespage/admin.py pada baris 15, lihat:

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
Popieluch
sumber
1

Catatan tentang AWS Elastic Beanstalk: Default settings.pyyang ditulis oleh Django-admin menyertakan referensi ke database sqlite lokal sebagai sumber data. Ini kemungkinan akan berfungsi pada OS lokal Anda, tetapi tidak pada AWS EB, dan akan memberikan populate() isn't reentrantkesalahan runtime. Untuk mengujinya, cukup beri komentar DATABASES={<...>}pernyataan di settings.py, terapkan, dan buka kembali aplikasi.

Pengguna AWS EB pemula
sumber
Ini terjadi misalnya jika Anda menerapkan ke AWS EB menggunakan Django versi 2.2 (atau yang lebih baru) dengan basis data sqlite default. Anda akan django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).diikuti oleh RuntimeError: populate() isn't reentrant. Dari dokumen AWS : "Django 2.2 tidak kompatibel dengan platform Elastic Beanstalk Python 3.6." (pada saat penulisan)
djvg
0

Saya mengalami masalah ini dan tidak dapat menemukan jawaban mengapa sampai saya mundur dari komitmen saya. Rupanya saya telah menambahkan impor yang tidak disengaja, karena pelengkapan otomatis, yang mengacaukan penyiapan.

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

Dalam log kesalahan apache: RuntimeError ("populate () tidak reentrant")

Ini bekerja dengan baik di lingkungan dev windows saya tetapi gagal di server ubuntu / apache.

Jan
sumber
0

Saya mengalami kesalahan yang sama setelah mengubah urutan pengaturan ini:

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

mengembalikannya ke urutan sebelumnya dan memulai ulang apache memperbaiki masalah.

Romain Jouin
sumber
0

Dalam kasus saya, saya memiliki custom renderer classuntuk Django Rest Framework, untuk beberapa tujuan saya harus mengganti metode kelas penyaji "get_context" (pengungkapan penuh: untuk django toolbarmemberikan jumlah kueri SQL yang benar)

Saya menghapus kelas itu dan menerapkan ulang. Berhasil.

Karan Kumar
sumber
0

Dalam kasus saya, kesalahan terjadi karena paket pip yang diperlukan tidak ada.

Jadi saya melakukan pip install -r requirements.txt, memulai kembali apache dan semuanya berfungsi lagi.

flix
sumber
0

Menghapus direktori virtualenv, membuat ulang virtualenv, lalu menginstal ulang semua persyaratan yang memperbaikinya untuk saya.

Farid El Nasire
sumber
0

Menambahkan alasan saya ke daftar. Bagi saya itu karena saya memiliki layanan django yang diberi nama dengan direktori yang sama sebagai direktori proses. Mengganti nama proses / dir memperbaiki masalah.

Menandai
sumber
0

Saya memiliki rekursif django.setup(), misalnya saya mencoba menulis django.setup()di dalam sebuah app/models.py, di jejak tumpukan django mencoba menunjukkan ini di dekat:

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

jadi ya, pastikan untuk tidak mencoba menyiapkan django saat django sedang disiapkan ...

ThorSummoner
sumber
0

Memulai ulang server Apache untuk saya memecahkan masalah. Anda dapat melakukannya dengan menggunakan perintah $ sudo service apache2 restart

Shivam Kohli
sumber
0

Saya mengalami masalah yang sama, yang berhasil untuk saya adalah mengomentari pengaturan basis data default di / settings.py. Saya juga membaca bahwa versi django tidak kompatibel dengan ebs

Steve Bien-Aime
sumber
0

Bagi saya kesalahan itu adalah mysqlclientpaket yang hilang di file requirement.txt.

Pertama saya menginstal mysqlclientpaket dengan:

pip install mysqlclient

lalu saya memperbarui file requirement.txt dengan:

pip freeze > requirements.txt

dan ini memecahkan masalah saya.

Abdulwahab Alhendi
sumber
-1

Dalam kasus saya, saya memiliki impor melingkar, yang menyebabkan kesalahan yang merusak metode populasi.

Luis Carlos Mejia
sumber
-1

Untuk memasukkan 2 sen Euro saya:

Saya membuat ulang pengaturan kerja di Docker. Penyiapan Docker baru gagal dengan

populate isn't reentrant

yang tampaknya merupakan kesalahan umum. Dalam kasus saya, saya mengabaikannya

pip install Django

menginstal versi terbaru ( 2.0), bukan versi yang diperlukan 1.11. Mengubah ini menjadi

pip install Django==1.11

memperbaiki masalah saya.

Olaf Dietsche
sumber
-1

Saya pikir ini adalah kesalahan umum jika ada yang salah settings.py. Terkadang saya dapat menemukan masalah dengan trial and error dengan menghapus aplikasi yang diinstal satu per satu. Dalam beberapa kasus, ini tidak terkait dengan aplikasi yang diinstal. Tetapi dari pengalaman saya, dalam semua kasus itu adalah masalah di dalam settings.pyfile.

Noel Puru
sumber
-1

periksa apakah Anda telah menyebutkan nama api Anda dua kali di bagian aplikasi yang diinstal settings.py.

Definisi aplikasi

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

Definisi aplikasi

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

Menghapus entri duplikat memecahkan masalah saya

Swati Srivastava
sumber
tapi tutorial mengatakan INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming
@ming Ini opsional.
Swati Srivastava