我用木星笔记本已经有一段时间了。通常,当我尝试停止单元格执行时,中断内核是不起作用的。在这种情况下,除了关闭笔记本并重新启动它之外,我还能做什么呢?我想这可能是很多人的普遍情况。
如果您不介意丢失所有当前定义的变量,那么转到 Kernel > Restart 将停止执行,而无需关闭笔记本。
目前,这也是 github jupyter 存储库中的一个问题, Https://github.com/ipython/ipython/issues/3400 除了杀死内核,似乎没有确切的解决方案
如果 iPython 内核没有死亡,您可以将 Python 代码注入其中,使用 硫铁矿保存重要数据。您需要安装和运行作为根,即与 sudo python -m pip install pyrasite或 python3的需要。然后,您需要计算出 iPython 内核的进程 id (PID)(例如,通过 htop或 ps aux | grep ipython) ,比如3873。然后,编写一个脚本,将状态保存到一个文件 inject.py中的 pickle,比如说,在全局范围内是一个熊猫数据帧 df:
sudo python -m pip install pyrasite
python3
htop
ps aux | grep ipython
inject.py
df
df.to_pickle("rescued_df.pkl")
最后,将其注入流程如下:
sudo pyrasite 3873 inject.py
您可能需要像下面这样首先启用 dtrace:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
我建议按照@hamdog 的建议重新启动内核(Kernel-> Restart Kernel)。
之后就可以使用了。但是,它肯定会删除存储在内存中的所有变量。
最近我也遇到了类似的问题。
发现 Pythonhttps://github.com/ipython/ipython/issues/3400中有一个问题,而且这个问题在 已经在2020年3月1日解决了。中已经存在了6年之久
这对我很有效: - 让笔记本电脑休眠(电源选项之一) 等10秒 - 唤醒电脑(有电源按钮)
内核然后说,重新连接和它要么中断,或者你可以按中断。
也许这不是万无一失的,但值得一试,这样你就不会浪费以前的计算时间。 (我让 Windows10运行一个不会停止运行一段 Selenium 代码的 Jupiter 笔记本电脑)
有一件事可能会奏效,那就是不停地打断别人。您正在使用的库可能会捕获中断信号,并且只在多次接收到信号后才停止。
例如,当使用 sklearn 的 cross _ val _ score ()时,我发现必须为每个交叉验证折叠中断一次。
您可以通过删除单元格来强制终止。我复制代码,删除单元格,创建一个新单元格,粘贴,然后再次执行。非常有效。
这里有几个选择:
更改数据的文件夹名称: 如果单元格已经在运行并从特定文件夹中提取数据,则可以正常工作。例如,我有一个 For 循环,当中断时,它只是移动到列表中的下一个项目,正在处理。
更改单元格中的代码以生成错误: 如果单元格尚未运行但正在队列中,则可以工作。
重启内核: 如果一切都失败了
对我来说,设定一个时间限制是有效的: https://github.com/scipopt/PySCIPOpt/issues/197。具体来说,我添加了一段“ model. setRealParam (“ limit/time”,60)”代码,它会在60秒后自动停止计算。你可以随时设置,而不是60。但这是针对 pyscipopt 软件包(求解优化模型)的。我不知道如何为你的具体问题设定时限。
如果你知道 预付款,你可能想要停止 而不失去所有的变量,下面的解决方案可能是有用的:
在由于循环长而需要花费一些时间的单元格中,您可以在循环中实现类似于下面这样的东西:
if os.path.exists(os.path.join(os.getcwd(),'stop_true.txt')): break
然后,如果你想停止,只要创建一个文件‘ stop _ true.txt’,循环就会在下一轮之前停止。
通常,这个文件被称为‘ stop _ false.txt’,直到我重命名它来停止循环。
此外,每个循环的结果分别存储在一个字典中。因此,我能够保持所有的结果,直到中断发生,并可以重新启动循环从这一点开始。
试试这个:
jupyter server list
jupyter server stop <PORT>