如何处理jupyter笔记本的GCP先发制人关机问题

问题描述 投票:0回答:1

在谷歌云平台的先发制人虚拟机实例中,可以随时调用强制关机。它们允许运行一个关机脚本来避免文件丢失。但如何使用脚本在我的jupyter笔记本中引起特定的中断?

google-cloud-platform jupyter-notebook shutdown
1个回答
1
投票

我已经想到了一个解决方案。

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

0
投票

Jupyter笔记本在其后台与一个实例虚拟机一起工作,你可以像其他实例一样通过ssh协议从计算引擎访问它们。这意味着任何在计算机引擎实例中工作的脚本都必须在jupyter笔记本上工作。

在你的描述中,我理解你指的是这个。关机脚本. 这个脚本在实例关闭时保存一个检查点,所以它不会自己触发关闭命令。

多方面 来关闭实例,既可以从实例内部(脚本)关闭,也可以从外部(云端shell、控制台用户界面...)关闭。

你能解释一下你的具体目的是什么吗,以便我进一步帮助你?

© www.soinside.com 2019 - 2024. All rights reserved.