Ipython: セルでpdbを実行した後、ハングします。カーネル/割り込みは役に立ちません

作成日 2017年05月08日  ·  34コメント  ·  ソース: ipython/ipython

pdbを介してセルをデバッグし、セルを再実行する前にセルを終了しないと、IPython環境に戻ることができません。 Jupyterノートブックのpdbhangのテストケースを介して再現し

pdb_resists_kernel_interrupt ipynb

レコードおよび検索エンジンの場合、ノートブックをハングアップするには:

  • 次のセルを実行します
  • pdbプロンプトを介して「終了」しないでください
  • その後、再度実行します。
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応答メッセージのメタデータフィールドとして実行することもできます。

notebook

最も参考になるコメント

これにも噛まれたばかりです。 人々は通常、jupyterノートブックでどのようにデバッグしますか? pdbを使用することは、手榴弾をジャグリングするようなものです:(

全てのコメント34件

私は同じ問題に直面しています。

絶対に、ここでも同じです。 これは私の体のかなり敏感な部分の王室の痛みです。 実行中のセルなしでpdbを停止する便利な方法が存在する場合、これは軽減される可能性があります。 あるいは、少なくともノートブックをシャットダウンする前に作業を保存する方法が重要になります(たとえば、トレーニングされたニューラルネットワークと、2000エポック後に保存時にノートブックがクラッシュする)。

この問題は、Jupyterバージョン4.30、Python3.6.2でも発生します。 カーネルを再起動することが、この問題を処理する唯一の方法のようです。

これが原因で8時間の計算が失われました...再開する時間です。

今日結果を提示することになっている64時間の計算を失いました-.-

誰も解決策を見つけませんでしたか?

これにも噛まれたばかりです。 人々は通常、jupyterノートブックでどのようにデバッグしますか? pdbを使用することは、手榴弾をジャグリングするようなものです:(

これを直してください! 私は常にこの問題を抱えています。

こっちも一緒。 非常に長い計算をやり直す必要があります

こっちも一緒。

誰かが修正してください、そして私はあなたに5ドルを支払います

@zsal深刻な場合は、 https: //www.bountysource.comでこの問題を追加できます。

ここでも同じ問題があります。 暴走したプロセスまたは入力を「待機」しているプロセスを中断して、制御を取り戻す方法が必要です...入力プロンプトにアクセスできなくなった場合でも。

私は初心者です-高度なプログラマーは一体どうやってノートブックでデバッグするのですか? 確かに、彼らはこの「時限爆弾」を含む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を発生させることです。

これが発生すると、複数の問題が発生するようです。

  1. SIGINTはzeromqを中断しません。 これはうまくいけばhttps://github.com/zeromq/pyzmq/pull/1368によって修正され
  2. zeromqが割り込み可能になったとしても、 pdbは、パーコレーションを防ぐKeyboardInterruptキャッチコードがたくさんあると思います。 これはおそらくIPython.core.debugger.Pdbで修正できる可能性があります。
  1. は正確ではありません。少なくともSIGINTハンドラー自体がオーバーライドされていない限り、zeromqはSIGINTによって中断され、KeyboardInterruptを発生させます。

@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のマスターが必要です。

このページは役に立ちましたか?
0 / 5 - 0 評価