6

マルチスレッド Web アプリケーション (Django、Plone) をローカルでデバッグするために ipdb デバッガーを使用しています。多くの場合、デバッグ プロンプトを表示しているときに発生する自動リロードが原因で、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