jupyter-notebook - Jupyter:即使前一个单元失败,也可以运行下一个单元
问题描述
如果长时间运行的单元格失败,我想发送警报,但我不想尝试/除了因为那样我会在查看错误时发送不必要的消息。有没有办法做到这一点?
所需的工作流程:
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')
解决方案
这是一个解决方案,具有非常小但可扩展的自定义 iPython 魔术。
你可以把它保存在一个名为magics.py
某处的文件中,或者有一个 pip 可安装的包。我使用了 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
。
推荐阅读
- javascript - 单选按钮选择具有相同名称的其他组按钮
- php - 使用 PHP 向 Android 应用推送通知
- java - 杰克逊禁用@JsonFormat注解
- uitabbar - 无法在 tvOS 13 上设置 UITabBarleadingAccessoryView
- vue.js - 如何组织嵌套的 axios 调用以使其更具可读性?
- python - 来自 scipy.interpolate 的 bisplrep 和 bisplev 的问题
- elasticsearch - 检查elasticsearch查询结果是否来自缓存?
- c# - Grapher COM 连接到 C#
- python-2.7 - Python:将文件转换为二进制文件的 tarfile 库
- python - Seaborn 小提琴情节 - 全部比较