pdbを介してセルをデバッグし、セルを再実行する前にセルを終了しないと、IPython環境に戻ることができません。 Jupyterノートブックのpdbhangのテストケースを介して再現し
レコードおよび検索エンジンの場合、ノートブックをハングアップするには:
def test():
import pdb; pdb.set_trace() # XXX BREAKPOINT
return 0
test()
Kernel / Interuptは役に立たないことに注意してください。 ノートブックを保存することはできますが、セルを再度実行するには、カーネルを再起動する必要があります。その時点で、「すべての変数が失われます」
これは、ノートブックの残りの部分でセルのデバッグ方法のヒントを検索しているときに、セルを変更して再度実行する前に終了するのを忘れた場合に、頻繁に発生することはありません。 はい、もっと注意することはできますが、他の人も同じ経験をしています。 #3400で説明されている便利なテストケースを提供してくれた
Python 3.4.3でJupyterノートブック4.3.1を実行しています(デフォルト、2016年11月17日、01:08:31)[GCC 4.8.4]
カーネル情報:Python 3.4.3(デフォルト、2016年11月17日、01:08:31)
# 10499の@takluyverからの入力
pdbは同じプロセスで実行され、いつ入力を期待しているかはわかります。 フロントエンドでHTML入力ボックスが削除されると、EOFErrorを発生させるメッセージがカーネルに返送されるように、誰かが作業を行う必要があると思います。
新しいメッセージタイプが必要になる場合があります。または、既存のstdin応答メッセージのメタデータフィールドとして実行することもできます。
私は同じ問題に直面しています。
絶対に、ここでも同じです。 これは私の体のかなり敏感な部分の王室の痛みです。 実行中のセルなしでpdbを停止する便利な方法が存在する場合、これは軽減される可能性があります。 あるいは、少なくともノートブックをシャットダウンする前に作業を保存する方法が重要になります(たとえば、トレーニングされたニューラルネットワークと、2000エポック後に保存時にノートブックがクラッシュする)。
この問題は、Jupyterバージョン4.30、Python3.6.2でも発生します。 カーネルを再起動することが、この問題を処理する唯一の方法のようです。
これが原因で8時間の計算が失われました...再開する時間です。
今日結果を提示することになっている64時間の計算を失いました-.-
誰も解決策を見つけませんでしたか?
これにも噛まれたばかりです。 人々は通常、jupyterノートブックでどのようにデバッグしますか? pdbを使用することは、手榴弾をジャグリングするようなものです:(
これを直してください! 私は常にこの問題を抱えています。
こっちも一緒。 非常に長い計算をやり直す必要があります
こっちも一緒。
誰かが修正してください、そして私はあなたに5ドルを支払います
ここでも同じ問題があります。 暴走したプロセスまたは入力を「待機」しているプロセスを中断して、制御を取り戻す方法が必要です...入力プロンプトにアクセスできなくなった場合でも。
私は初心者です-高度なプログラマーは一体どうやってノートブックでデバッグするのですか? 確かに、彼らはこの「時限爆弾」を含むPDBを使用していませんか? 秘密を共有してください! :)
+1
+1
+1
+1
上!
この問題は、私がpdbを使用し、セルを再実行する前に終了するのを忘れるたびに、何年もの間私にとって苦痛でした。
BountySourceでバウンティを作成しました。 十分なお金を集めることができれば、これは最終的に修正されるかもしれません。
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help
+1
+1
これは私を何年も夢中にさせてきました。
代わりにIPython.core.debugger.Pdb
使用するのはどうですか?
from IPython.core.debugger import Pdb; Pdb().set_trace()
(または、 %debug
マジックをデバッグに使用できます。)
Pdb().set_trace()
2回実行すると、同じ問題が発生します。
私はこれを調査しています。 割り込みが機能する基本的な方法は、(Unixでは)プロセスにシグナルを送信し、それがKeyboardInterruptを発生させることです。
これが発生すると、複数の問題が発生するようです。
pdb
は、パーコレーションを防ぐKeyboardInterruptキャッチコードがたくさんあると思います。 これはおそらくIPython.core.debugger.Pdb
で修正できる可能性があります。@minrkは正しく、私は間違っていました。ごめんなさい。
この修正を適用するには、次のことが必要です。
これを調べてくれてありがとう!
新しいIPykernelリリースがあるとすぐに、これは修正されたものとして閉じることができます。
終わり! これは閉じることができます。
import IPython
import ipykernel
print(IPython.__version__)
print(ipykernel.__version__)
IPython.core.debugger.set_trace()
7.15.0
5.3.0
`` `250 sys.stdout.flush()
251
-> 252 def __call __(self、result = None):
253 "" "履歴キャッシュ管理を使用した印刷。
254
--KeyboardInterrupt--
--KeyboardInterrupt--
`` `
私の場合、KeyboardInterruptは何もしないようです。 それは期待される動作ですか?
私はそれが中断することを期待します。 再現できるか見てみます。 これはWindowsですよね?
macOS 10.15.5
Python 3.6.2 (default, May 4 2018, 19:40:30)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
ああ、これは予期されていません。 明確にするために追加できる情報があれば教えてください。
ピップリスト
`` `パッケージバージョン
appnope 0.1.0
attrs 19.3.0
バックコール0.2.0
ブリーチ3.1.5
デコレータ4.4.2
defusedxml 0.6.0
エントリポイント0.3
ipykernel 5.3.0
ipython 7.15.0
ipython-genutils 0.2.0
ipywidgets 7.5.1
ジェダイ0.17.1
Jinja2 2.11.2
jsonschema 3.2.0
jupyter 1.0.0
jupyter-client 6.1.3
jupyter-console 6.1.0
jupyter-core 4.6.3
MarkupSafe 1.1.1
ミスチューン0.8.4
nbconvert 5.6.1
nbformat 5.0.7
ノートブック6.0.3
パッケージング20.4
pandocfilters 1.4.2
パルソ0.7.0
pexpect 4.8.0
pickleshare 0.7.5
ピップ20.0.2
プロメテウス-クライアント0.8.0
プロンプトツールキット3.0.5
ptyprocess 0.6.0
ピグメント2.6.1
pyparsing 2.4.7
熱狂的な0.16.0
python-dateutil 2.8.1
pyzmq 19.0.1
qtconsole 4.7.5
QtPy 1.9.0
Send2Trash 1.5.0
setuptools 46.0.0
6つの1.15.0
ターミナド0.8.3
テストパス0.4.4
竜巻6.0.4
特性4.3.3
wcwidth 0.2.5
webencodings 0.5.1
ホイール0.34.2
widgetsnbextension 3.5.1```
私にとっては、更新後も問題が解決しませんでした。 また、私が仕事で使用しているリモートLinux計算ノードについては、以下を参照してください。
import IPython
import ipykernel
import os
import platform
print(IPython.__version__)
print(ipykernel.__version__)
print(os.name,platform.system(),platform.release())
IPython.core.debugger.set_trace()
7.15.0
5.3.0
posix Linux 4.19.94-300.el7.x86_64
現在、かなりかさばる環境で作業しているため、一部の依存関係が原因である可能性を排除できませんか? エラーが最小限の環境でも再現されるかどうかを確認することができますか?
これには、まだリリースされていないIPykernelのマスターが必要です。
最も参考になるコメント
これにも噛まれたばかりです。 人々は通常、jupyterノートブックでどのようにデバッグしますか? pdbを使用することは、手榴弾をジャグリングするようなものです:(