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

时间:2014-11-26 22:29:55

标签: python ipython ipython-notebook

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

1 个答案:

答案 0 :(得分:19)

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

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

解决方法取决于您的代码,以及您愿意等待多长时间才能获得结果。作为一般规则,请尝试以下操作:

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

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