为什么Ipython单元格会停止执行?

use*_*999 17 python ipython ipython-notebook

我确定这是一个非常新的问题,所以我提前道歉.我正在尝试将ipython notebook用于团队项目.我们正在构建的程序相当大,并且引入了大量外部数据集.很多时候,Ipython似乎停止了工作.我将尝试运行一个单元格或多个单元格,不会发生任何事情(除了一个小的星号*将出现在单元格左侧的括号[]中).即使我尝试添加一个新单元格并执行2 + 2,也不会发生任何事情.这里发生了什么?我该如何解决?谢谢!

mfi*_*tzp 19

单元格旁边的星号[*]表示该单元格当前正在执行.虽然IPython为每个笔记本提供了自己的内核,但每个笔记本只有一个内核.当该内核忙于执行代码(单元格或一系列单元格)时,它无法接受或运行任何其他代码,直到它当前正在执行的操作完成.新的执行位于队列中,直到内核准备就绪.

如果你在尝试执行后等待足够长时间,2+2你会发现它最终会执行(假设你的主代码已经退出).

解决方案取决于您的代码,以及您愿意等待多长时间才能获得结果.一般来说,请尝试以下方法:

  • 使用较小的数据集来测试算法,然后逐渐放大,注意时间的增加.您的完整数据集是否可行?
  • 您的算法是否正在读取/写入磁盘?你能避免它,或预加载/后保存状态吗?
  • 是否可以将数据分成批次?
  • 如果您的算法是可混合的,那么您可以将其并行化以充分利用您的CPU吗?

您可以中断内核,但是如果执行当前不在内核手中,例如在外部C模块中(numpy例如很多),这将无法工作.在这些情况下,您可能需要完全重启.