在谷歌云平台的先发制人虚拟机实例中,可以随时调用强制关机。它们允许运行一个关机脚本来避免文件丢失。但如何使用脚本在我的jupyter笔记本中引起特定的中断?
我已经想到了一个解决方案。
from os import getpid, kill
from time import sleep
import signal
import ipykernel
import psutil
def get_active_kernels():
active_kernels = []
pids = psutil.pids()
my_pid = getpid()
for pid in pids:
if pid == my_pid:
continue
try:
p = psutil.Process(pid)
cmd = p.cmdline()
for arg in cmd:
if arg.count('ipykernel'):
active_kernels.append(pid)
except psutil.AccessDenied:
continue
return active_kernels
if __name__ == '__main__':
kernels = get_active_kernels()
for kernel in kernels:
kill(kernel, signal.SIGINT)
可以使用这段代码作为关机脚本。它对所有现有的jupyter内核调用一个键盘中断。所以,在jupyter笔记本内部可以使用一个简单的try-except块,接受键盘中断。
try:
... #regular code
except KeyboardInterrupt:
... #code to save the progress