2011-09-01 88 views
5

我最近升級到python2.7和django1.3從那時起Django的例外纏着我,不知道該如何調試它

Unhandled exception in thread started by <bound method Command.inner_run of <django.core.management.commands.runserver.Command object at 0x109c57490>> 
Traceback (most recent call last): 
    File "/Users/ApPeL/.virtualenvs/myhunt/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 88, in inner_run 
     self.validate(display_num_errors=True) 
    File "/Users/ApPeL/.virtualenvs/myhunt/lib/python2.7/site-packages/django/core/management/base.py", line 249, in validate 
     num_errors = get_validation_errors(s, app) 
    File "/Users/ApPeL/.virtualenvs/myhunt/lib/python2.7/site-packages/django/core/management/validation.py", line 36, in get_validation_errors 
     for (app_name, error) in get_app_errors().items(): 
    File "/Users/ApPeL/.virtualenvs/myhunt/lib/python2.7/site-packages/django/db/models/loading.py", line 146, in get_app_errors 
     self._populate() 
    File "/Users/ApPeL/.virtualenvs/myhunt/lib/python2.7/site-packages/django/db/models/loading.py", line 67, in _populate 
     self.write_lock.release() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 137, in release 
     raise RuntimeError("cannot release un-acquired lock") 
    RuntimeError: cannot release un-acquired lock 

您的幫助將不勝感激。

+0

你升級了哪個版本?此外,錯誤何時發生? – d0ugal

+0

Django 1.1.2和python 2.6 – ApPeL

+0

你用新鮮的virtualenv還是和升級之前一樣? – yedpodtrzitko

回答

1

通常的第一個建議是將最新的更新應用到gevent或greenlet,或者使用與線程相關的東西。 threading.Thread.start的實現在Python 2.6和2.7之間進行了更改。有很多食譜如何開始綠色......或者綠色......用Django。嘗試閱讀Python 2.7的最新版本。併發送一個問題的鏈接。

調試: 添加以下行到你manage.py使螺紋的記錄開始等標準錯誤:

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 

注: - 通過阻塞的鎖定
owner=None count=0>.release()第一獲取 -
count=1 acquire(1)的鎖,目前正在解鎖

$ 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 

這與自動重裝相同。模型由子進程驗證。 「Dummy-1」是線程的符號名稱。對於更多的線程,這可以重複,但是在上一個線程釋放之前,沒有線程應該/可以獲取該鎖。我們可以繼續根據結果。

相關問題