Jupyter notebook Jupyter:即使前一个单元格失败也运行下一个单元格的技巧

Jupyter notebook Jupyter:即使前一个单元格失败也运行下一个单元格的技巧,jupyter-notebook,jupyter,alerts,Jupyter Notebook,Jupyter,Alerts,如果长时间运行的计算单元出现故障,我想发送警报,但我不想尝试/除非,因为当我看到错误时,我会发送不必要的消息。有办法做到这一点吗 所需的工作流程: 1) 运行status=train()cell 2) 在前15秒内未发现任何错误 3) 执行下一个单元格send_alert('done or error'),无论单元格1的结果如何,都将执行该单元格 4) 去做点别的吧 下面是一个单单元解决方案,每次都会让代码感到恼火: try: start = time.time() train(

如果长时间运行的计算单元出现故障,我想发送警报,但我不想尝试/除非,因为当我看到错误时,我会发送不必要的消息。有办法做到这一点吗

所需的工作流程:

1) 运行
status=train()
cell

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')

这里有一个解决方案,它有一个非常小但可扩展的自定义iPython magic

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

.
├── magics
│   ├── __init__.py
│   └── executor.py
└── setup.py
#magics/executor.py
导入时间
从IPython.core.magic导入Magics、Magics\u类、cell\u magic
@魔术班
职业特例(魔法):
@细胞魔术
def分离器(自身、线路、单元):
超时=2
尝试:
开始=时间。时间()
self.shell.ex(单元格)
除:
如果time.time()-start>timeout:
打印(“慢失败!”)
其他:
如果time.time()-start>timeout:
打印(“完成”)
\magics/\uuuuuu init\uuuuuuu.py
from.exceptor导入exceptor
def加载ipython扩展(ipython):
ipython.register_magics(例外)
下面是一个使用此功能的示例。请注意,
%load\u ext magics
采用包的名称,然后提供名为
%exceptor
的单元格魔法


您可以使用
nbconvert
(请参阅)从CLI获取此信息,但看起来您希望以交互方式执行此操作?这看起来像是你想要一个装饰师,但对于一个细胞:写一个定制的线/细胞魔术会为你工作吗?谢谢!这很有效。使用flit制作pypi包。