An IPython/Jupyter cell magic to execute code after a cell succeeds or fails so you can receive an alert when your code terminates.
Installation
$ pip install on-done
Example
Start by launching an IPython session:
$ ipython
Then, load the extension:
In [1]: %load_ext on_done
Next, define a function to alert you that your code has terminated.
In [2]: def alert():
...: from datetime import datetime
...: print(f"Cell terminated at {str(datetime.now())}\n")
You can change this function to send yourself an email, Slack alert, etc.
Putting %%on_done alert()
at the top of a cell will cause it to alert:
In [3]: %%on_done alert()
...: import numpy as np
...: x = np.random.randn(10**8)
...: print(f"mean={x.mean()}")
mean=0.00021783589122321365
Cell terminated at 2022-11-21 00:35:40.678180
In particular, the alert will also occur if the cell failed:
In [4]: %%on_done alert()
...: import numpy as np
...: x = np.random.randn(10**8)
...: print(f"mean={x.mean(axis=1)}")
Cell terminated at 2022-11-21 00:35:50.654766
---------------------------------------------------------------------------
AxisError Traceback (most recent call last)
...
Credit
on-done is inspired by this Stack Overflow answer by Colin Carroll