2013-05-16 62 views
5

我使用ipdb調試器在本地調試多線程的web應用程序(Django,Plone)。通常,ipdb似乎因爲在調試提示符時發生的自動重載而感到困惑。得到的堆棧跟蹤出現ipdb,多線程和自動重裝程序導致ProgrammingError

/Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in writeout_cache(self, conn) 
     605   with self.db_input_cache_lock: 
     606    try: 
    --> 607     self._writeout_input_cache(conn) 
     608    except sqlite3.IntegrityError: 
     609     self.new_session(conn) 

    /Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in _writeout_input_cache(self, conn) 
     589    for line in self.db_input_cache: 
     590     conn.execute("INSERT INTO history VALUES (?, ?, ?, ?)", 
    --> 591         (self.session_number,)+line) 
     592 
     593  def _writeout_output_cache(self, conn): 

    ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 4546363392 and this is thread id 140735211872640 

在此之後,無論是程序不能關閉(掛線)或IPDB本身停止工作。

有沒有辦法使用ipdb遷移這個問題,並使其更加多線程/自動重載安全?

編輯:澄清了這個問題,因爲我認爲這可能是潛在的IPython問題。可能會出現某種解決方法,使IPython只需在重新加載時丟棄歷史記錄,或者禁用有問題的IPython SQLite以其他方式寫入。

回答

5

您隨時可以在單線程模式下運行的Django

python manage.py runserver --nothreading