如果长时间运行的单元发生故障,我想发送警报,但是我不想尝试/除外,因为那样的话,当我查看错误时,我将发送不必要的消息。有办法吗?
所需的工作流程:
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')
答案 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
的单元魔术。