Обычная первая рекомендация - применять последние обновления к gevent или greenlet или к тому, что вы используете, связанным с потоками. Реализация threading.Thread.start была изменена между Python 2.6 и 2.7. Есть много рецептов, как начать зеленый ... или зеленый ... с Джанго. Попробуйте прочитать любой недавний для Python 2.7. и отправьте ссылку, из-за которой возникает проблема.
Debugging:
Добавьте следующие строки в manage.py
, чтобы включить ведение журнала запуска потока и т. Д. В stderr:
import threading
setattr(threading, '__debug__', True)
Добавьте аргумент verbose
в django/db/loading.py
строку 39, чтобы увидеть также, какие потоки получают и снимают блокировку.
- write_lock = threading.RLock(),
+ write_lock = threading.RLock(verbose=True),
Запустить сервер разработки. Только для одного потока без автозагрузки вы должны увидеть что-то вроде:
$ python manage.py runserver --noreload
Validating models...
MainThread: <_RLock owner='MainThread' count=1>.acquire(1): initial success
MainThread: <_RLock owner=None count=0>.release(): final release
Примечания:
count=1 acquire(1)
- первый захват блокирующим замком
owner=None count=0>.release()
- замок в данный момент разблокирован
$ python manage.py runserver
Validating models...
Dummy-1: <_RLock owner=-1222960272 count=1>.acquire(1): initial success
Dummy-1: <_RLock owner=None count=0>.release(): final release
То же самое и с автозагрузкой. Модели проверяются дочерним процессом.
«Пустышка-1» - это символическое название темы. Это может быть повторено для большего количества потоков, но никакие потоки не должны / не могут получить блокировку, пока она не будет снята предыдущим потоком. Мы можем продолжить в соответствии с результатами.