Ipython: カーネルがノートブックフロントエンドに過剰な出力を送信することさえ防止します

作成日 2014年10月22日  ·  19コメント  ·  ソース: ipython/ipython

PEBKACの場合のために、SafariとFirefoxでロードされなくなった多くのプリントアウトを含む大きなノートブック(4.6 MB)を作成しました。 Safariはまったく返事をくれません。しばらくすると、Firefoxはスクリプトが応答しないと言ってきます。 最後にChromeがそれをロードできるので、clearoutput関数を使用してメガバイトのテキストを取り除くことができました。
ですから、もう助けは必要ありませんが、このスクリプトを壊れた形で見て、ノートブックをそのような愚かさから守るためにできることがあるかどうかを確認することに興味があるのではないかと考えていました。
壊れたスクリプトをここにアップロードしました: https

bug notebook

最も参考になるコメント

IPythonがこれを支援するためにいくつかのことを行うことができれば素晴らしいでしょう:

  • 「あなたのプログラムは大量の出力を作成しています。実行を続けますか?」
  • ノートブックのロード:「このノートブックには多くの出力が含まれています。出力セルをクリアしますか、それとも正常にロードしますか?」

全てのコメント19件

おかげで、私たちはそれを調べます。

anti while True loop拡張機能についてはhttps://github.com/ipython/ipython/issues/6516を参照して

IPythonがこれを支援するためにいくつかのことを行うことができれば素晴らしいでしょう:

  • 「あなたのプログラムは大量の出力を作成しています。実行を続けますか?」
  • ノートブックのロード:「このノートブックには多くの出力が含まれています。出力セルをクリアしますか、それとも正常にロードしますか?」

@CarreauこれはFAQにあるべきだと思います! パンダを使用すると、130,000のデータポイントを持つ200列を超えるプロットを誤って作成することが非常に簡単です...そのプロットがインラインの場合、ブラウザを「糖蜜」にします。 ;)

うーん、 nbconvert --to=オプションは、潜在的な出力として.ipynbについて言及しておらず、 --to=ipynbそれを使用するだけで

nbconvert --help-all抽出:

--to=<CaselessStrEnum> (NbConvertApp.export_format)
    Default: 'html'
    Choices: ['custom', 'html', 'latex', 'markdown', 'notebook', 'pdf', 'python', 'rst', 'slides']

notebookという意味だと思いますか? ipynbnotebookにエイリアスする必要がありますか?

私はこれを私の生徒(そして私)によく見ます。 ipythonを13文字に分割する方法:

def f():
    f()
f()

1000スタックリストはChromeでフリーズしたノートブックを作成します。 しかし、ダッシュボードとノートブックがロックされているため、新しいノートブックを開いてこれらの変換コマンドを実行することはできません... 5分後に...リリースされました! 今、私はセルからの出力をクリアしようとしています...あと5分...ノートブックタブを閉じても役に立ちません。

どのバージョンですか? 私は2.3.1の最後の公式リリースを持っています、そしてそれはこれを持っています:

--to=<CaselessStrEnum> (NbConvertApp.export_format)
    Default: 'html'
    Choices: ['custom', 'html', 'latex', 'markdown', 'python', 'rst', 'slides']
    The export format to be used.

ipython nbconvert使用していますが、追加のアプリケーションはありますか?

2.xはipynbからipynbを実行できません

ここでの主な問題は、ブラウザーで大量の入力をレンダリングするのにかかる時間だと思います(ただし、カーネルからブラウザーに4.6 MBを転送するだけでも時間がかかります)。 ここでの別の問題は、提案されたCSSの変更がこの問題に役立つ可能性があることを示唆しています。

関連する点として、スタックトレースに20を超える関数呼び出しがあるトレースバックを表示することは役に立ちません。 スタックトレースで使用できる展開/折りたたみ階層ツリーオブジェクトを用意することを検討してください。 または、大きな出力の場合は、ノートブックがレンダリングできることを確認するために「もっと表示...」リンクが必要です。 (静的nbviewerでは、大きな出力は問題にならないようです。先日、学生の500ページのnbviewerでレンダリングされたノートブックをスタックトレースで誤って印刷しました...)

ノートブックをアンロード可能にする大きな出力の問題は、どのJupyterカーネルでも発生する可能性があるため、IPythonだけに限定されません。

私はカーネルをローカルで実行しているので、4.6MBのデータの転送にそれほど時間がかからないことを期待する必要があります。
私の勘は、これらの標準線の1つを解釈/レンダリングするのにかなりの固定費がかかるということです。 つまり、Kラインで1つの標準出力をレンダリングする時間と、それぞれ1行でKの標準出力をレンダリングする時間です。

大量の出力がノートブック(または他の)フロントエンドに到達するのを防ぐために、いくつかのセーフガードを配置することについて以前に話しました。 現在、大きな出力を処理する方法は非常に問題があります。 いくつかのポイント:

  • カーネル自体がこれを管理する必要があります-特定のポイントを超えて出力を送信することさえ拒否する必要があります。
  • カーネルは大きな出力をどこかに保存する必要があります(おそらくディスクに保存しますが、それは特定のポイントを超えて問題になることさえあります)。
  • カーネルは、大きな出力が生成されたことを示す何かを送信し、それを表示する方法をユーザーに提供するか、少なくとも生成された出力の量と配置場所をユーザーに通知する必要があります。
  • これらすべてをインテリジェントな方法で出力スクロール/折りたたみと統合する必要があります。

このより一般的な問題を反映するために、この問題のタイトルを変更しました。

わかりましたが、フロントエンドは「多すぎる」ことをよく知っているようです。 カーネルが決定した場合、それはすべてのフロントエンドで同じになります。 コンソールの多すぎるものは、ノートブックのそれとは異なります。

私はほとんどあなたに同意します。 段階的なアプローチをとることはおそらく理にかなっています
最初はこれがフロントエンドによって処理されました。 しかし、非常に大きなデータの場合、
あなたはそれを処理できるフロントエンドがないことを知っています。 しかし、ほとんど
重要なことは、特定のポイントを超えると、人間は合理的にできないということです
出力を見てください。 パフォーマンスだけでなく、ユーザーも重要です
経験。 私たちはユーザーに「あなた」と言うことにかなり積極的になることができると思います
見た目よりも多くの出力を生成しようとしただけです」
パフォーマンスの問題に関係なく。

2015年1月12日月曜日午前10時38分、ダグブランク[email protected]
書きました:

わかりましたが、フロントエンドは「多すぎる」ことをよく知っているようです。 の場合
カーネルが決定すると、すべてのフロントエンドで同じになります。 何も
コンソールの場合はノートブックの場合とは大きく異なります。


このメールに直接返信するか、GitHubで表示してください
https://github.com/ipython/ipython/issues/6771#issuecomment-69620565

ブライアンE.グレンジャー
カリフォルニア州立大学サンルイスオビスポ校
TwitterとGitHubの@ellisonbg
[email protected]および[email protected]

@Carreauからのコメントに触発されて、私はこのノートブック拡張機能を作成しました:
https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/limit-output

ブラウザーが無限の印刷ループでクラッシュするのを防ぐために、私にとってはうまく機能します。

@juhaschに同意すると、ブラウザのクラッシュのほとんどはDOM要素が原因で発生しました。
「制限」は出力のタイプに大きく依存します。 PNGまたはテキストと同じ量のデータを表示することは、ブラウザーが処理できるものに関して完全に異なります。

@juhasch IPython 3の拡張機能をデフォルトで有効にする必要があると思います。そうしないと、スタックオーバーフローによってノートブックがアンロード可能になります。

ところで、/ nbextensions /に移動して、拡張機能の[アクティブ化]をクリックできるのは何ですか...私もそれが欲しいです!

/ nbextensions /のサーバー拡張機能は、次のプルリクエストに含まれています。
https://github.com/ipython-contrib/IPython-notebook-extensions/pull/164

この問題はIPython自体にはないため、それでも問題があり関連性がある場合は、適切なリポジトリで開く必要があります。 これにより、IPythonリポジトリで開いている問題の数を制御できるようになります。

コメントを続けるか、必要に応じて再開してください。

ありがとう。

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