Ipython: 防止内核甚至向笔记本前端发送太多输出

创建于 2014-10-22  ·  19评论  ·  资料来源: ipython/ipython

由于PEBKAC的原因,我们创建了一个大型笔记本(4.6 MB),其中有很多打印输出,这些输出在Safari和Firefox中不再加载。 Safari根本没有回复我,Firefox过了一会儿告诉我该脚本没有响应。 末尾的Chrome可以加载它,这样我就可以使用clear输出函数来摆脱兆字节的文本。
因此,我真的不再需要帮助,但我想您可能有兴趣以破碎的形式查看此脚本,以查看是否可以采取任何措施使笔记本电脑免受此类傻瓜的影响。
我在此处上传了损坏的脚本: https :

bug notebook

最有用的评论

如果IPython可以做一些事情来帮助实现这一点,那就太好了:

  • “您的程序正在创建大量输出;是否继续运行?”
  • 正在加载笔记本:“此笔记本包含大量输出;清除输出单元格还是正常加载?”

所有19条评论

谢谢,我们会调查一下。

cf https://github.com/ipython/ipython/issues/6516以获得anti while True loop扩展名,如果再次发生,您也可以从nbconvert命令行运行clear输出并执行ipynb-> ipynb。

如果IPython可以做一些事情来帮助实现这一点,那就太好了:

  • “您的程序正在创建大量输出;是否继续运行?”
  • 正在加载笔记本:“此笔记本包含大量输出;清除输出单元格还是正常加载?”

@Carreau我认为这应该在常见问题解答中! 使用大熊猫,很容易意外地创建一个200列,13万个数据点的绘图...如果该绘图是内联的,则会“破坏”浏览器。 ;)

嗯, 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吗? 我们应该将ipynb别名notebook吗?

我和我的学生(和我)经常看到这一点。 如何用13个字符分隔ipython:

def f():
    f()
f()

1000个堆栈列表在Chrome中创建了一个冻结的笔记本。 但是后来一个人不能打开新笔记本来运行这些转换命令,因为仪表板和笔记本被锁住了……5分钟后……被释放! 现在,我尝试清除单元格中的输出...再过5分钟...即使关闭Notebook标签也无济于事。

什么版本的? 我上次正式发布的版本为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个以上函数调用的回溯是没有用的。 考虑具有stacktrace可以使用的展开/折叠层次树对象。 或者,对于任何较大的输出,应该有一个“显示更多...”链接,以确保笔记本可以渲染。 (在静态nbviewer中,大输出似乎不是问题。前几天,我无意中打印了一个学生用堆栈跟踪显示的500页nbviewer呈现的笔记本……)

大输出使笔记本无法装载的问题可以在任何Jupyter内核中发生,因此不仅限于IPython。

我在本地运行内核,因此我希望传输4.6MB数据不会花费那么长时间。
我的直觉是,解释/渲染这些标准输出行之一需要花费大量固定成本。 也就是说,现在用K线渲染1条标准线与每条1条线渲染K条标准线的时间是多少?

我们之前曾讨论过要设置一些安全防护装置,以防止大量输出甚至到达笔记本电脑(或其他)前端。 我们现在处理大量产出的方式存在很大问题。 一些要点:

  • 内核本身应对此进行管理-它甚至应拒绝发送超出特定点的输出。
  • 内核应该将较大的输出保存在某个地方(可能保存到磁盘上,但这甚至可能超出某个点)。
  • 内核应该发送一些指示生成大量输出的内容,并为用户提供某种查看方式,或者至少告诉用户生成多少输出以及将其放置在何处。
  • 所有这些都应该以智能的方式与输出滚动/折叠集成在一起。

我已更改此问题的标题以反映此更一般的问题。

好的,但是前端似乎更了解“太多”。 如果内核决定,那么所有前端都将是相同的。 对于控制台而言,太多的事情与对于笔记本电脑而言有所不同。

我大部分都同意你的观点。 采取分层方法可能很有意义
最初由前端处理。 但是对于真正的大数据,
您知道没有任何前端可以处理它。 但是最
重要的是,在一定程度上,没有人能够合理地
看一下输出。 这不仅与性能有关,还与用户有关
经验。 我认为我们可以相当积极地告诉用户“您
只是试图产生比您可能看起来更多的输出”
无论性能问题如何。

2015年1月12日星期一上午10:38,道格·布兰克[email protected]
写道:

好的,但是前端似乎更了解“太多”。 如果
内核决定,那么对于所有前端来说都是一样的。 太过分了
控制台与笔记本电脑有很多不同。


直接回复此电子邮件或在GitHub上查看
https://github.com/ipython/ipython/issues/6771#issuecomment -69620565。

布莱恩·格兰杰
加州州立大学圣路易斯奥比斯波分校
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 等级

相关问题

quchunguang picture quchunguang  ·  3评论

frenzymadness picture frenzymadness  ·  3评论

ghost picture ghost  ·  4评论

peter-ch picture peter-ch  ·  4评论

sataliulan picture sataliulan  ·  4评论