我使用ipdb调试器在本地调试多线程web应用程序(Django,Plone)。通常ipdb看起来很困惑,因为autoreload发生在我在调试提示时。产生的堆栈跟踪出现/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在重新加载时简单地丢弃历史记录,或者以其他方式禁用有问题的ipythonsqlite写入。在