6

我正在使用 ipdb 调试器在本地调试多线程 Web 应用程序(Django、Plone)。通常 ipdb 似乎会因为我在调试提示符下发生的自动重载而感到困惑。结果堆栈跟踪出现

/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 写入。

4

1 回答 1

5

您始终可以在单线程模式下运行 Django

python manage.py runserver --nothreading
于 2014-01-17T02:15:10.797 回答