Jupyter:即使前一个单元出现故障也可以运行下一个单元的技巧

时间:2019-08-05 18:51:13

标签: jupyter-notebook jupyter alerts

如果长时间运行的单元发生故障,我想发送警报,但是我不想尝试/除外,因为那样的话,当我查看错误时,我将发送不必要的消息。有办法吗?

所需的工作流程:

1)运行status=train()单元格

2)在最初的15秒内没有看到错误

3)执行下一个单元格send_alert('done or error'),无论单元格1的结果如何,该单元格都将执行。

4)去做别的事情

这里是一个单细胞解决方案,每次都会令人讨厌:

try:
    start = time.time()
    train(...)
except Exception as e:
    pass
end = time.time()
if end - start > 60: send_alert('done')

1 个答案:

答案 0 :(得分:1)

这是一个解决方案,它具有很小但可扩展的自定义iPython魔术。

您可以将其保存在某个名为magics.py的文件中,或者使用pip可安装的软件包。我使用了可点子安装的东西:

.
├── magics
│   ├── __init__.py
│   └── executor.py
└── setup.py
# magics/executor.py

import time
from IPython.core.magic import Magics, magics_class, cell_magic

@magics_class
class Exceptor(Magics):

    @cell_magic
    def exceptor(self, line, cell):
        timeout = 2
        try:
            start = time.time()
            self.shell.ex(cell)
        except:
            if time.time() - start > timeout:
                print("Slow fail!")
        else:
            if time.time() - start > timeout:
                print("done")
# magics/__init__.py

from .exceptor import Exceptor

def load_ipython_extension(ipython):
    ipython.register_magics(Exceptor)

这里是使用此示例。请注意,%load_ext magics使用了程序包的名称,然后为您提供了名为%exceptor的单元魔术。

enter image description here