我的团队正试图通过关闭Jupyterlab内部的所有内核和开放终端来削减我们的云成本预算.这可以通过导航到打开的内核部分,然后为内核和终端单击Shut Down All来轻松完成.在此过程中,其他用户正在工作,他们只需重新启动其内核即可.我们的 idea 是让一个脚本在每个人都停止工作的某个时刻关闭所有内核和终端.

话虽如此,但在命令行中关闭单个jupyterlab内核时,我遇到了一些困难.Is it possible to shut down a jupyter kernel through command line?我想要类似于以下的东西:

jupyter --change_kernel None file.ipynb

try

  1. kill -9 {ipynb_pid}.
    Killing a jupyterlab pid does not shut down the kernel. Jupyter thinks this is an error, and subsequently restarts it in another pid.

  2. modify the metadata to have No kernel.
    As per this post, I have tried to change the kernel by editing the json of the ipynb files that I want to kill. I.e. jq '.metadata.kernel="None"' my_file.ipynb > my_file.ipynb. This leads to very spicy overwrite issues. Also, if there are unsaved changes, this does not play nice.

推荐答案

以下是我为解决此问题而编写的PowerShell函数-

function DeleteJupyterKernel {
    param (
        [string]$baseUrl = "http://localhost:8888" ,    # Base URL of your Jupyter server
        [string]$token = "mytoken",      # Your Jupyter access token
        [string]$kernelId    # ID of the kernel to delete
    )
    
    # Create a web session
    $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession

    # Initial GET request to set the XSRF token
    $getResponse = Invoke-WebRequest -Uri "$baseUrl/tree?" -WebSession $session -UseBasicParsing

    # Extract the XSRF token
    $xsrfToken = $session.Cookies.GetCookies($baseUrl)['_xsrf'].Value

    # Define headers for DELETE request
    $headers = @{
        "X-XSRFToken" = $xsrfToken
        "Authorization" = "token $token"
    }

    # DELETE request URL
    $deleteUri = "$baseUrl/api/kernels/$kernelId"

    # Perform the DELETE request
    $response = Invoke-RestMethod -Uri $deleteUri -Method Delete -Headers $headers -WebSession $session -SkipCertificateCheck

    return $response
}

然后,您可以通过将内核id传递给此函数来调用此函数,如下所示-

DeleteJupyterKernel -kernelId "<kernelid>"

你可以获取内核id,做类似的事情,见下文-

function listjupytersessions{

    # Define the URL for GET request
    $getUri = "http://localhost:8888/api/sessions/?token=mytoken"
    
    # Send the GET request
    $response = Invoke-RestMethod -Uri $getUri -Method Get -SkipCertificateCheck
    # Initialize the Counter
    $counter = 1
    # Process each session
    foreach ($session in $response) {
        $name = $session.name
        $kernelId = $session.kernel.id
        $kernelName = $session.kernel.name
        $executionState = $session.kernel.execution_state
    
        # Output the extracted information
        Write-Host ""
        Write-Host "------KernelInfo for Kernel $counter with Id $kernelId Starts------"
        Write-Host "Notebook Name: $name"
        Write-Host "Kernel ID: $kernelId"
        Write-Host "Kernel Name: $kernelName"
        Write-Host "Execution State: $executionState"
        Write-Host "------KernelInfo for Kernel $counter with Id $kernelId Ends------"
        $counter++
    }
    $counter = 1
}

让我知道进展如何.

Python-3.x相关问答推荐

字符串块数组:如何根据一个数组中的元素对另一个数组中的元素进行分组

具有多个值的极轴旋转和熔化/取消旋转(反转旋转)操作(Pandas 堆叠/取消堆叠交替/UDF覆盖)

根据另一列中的条件填写该列中的值

如何计算Pandas 列中每列唯一项目的出现次数?

如何向 scikit-learn 函数添加类型提示?

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

判断 gekko 中的表达式

如何准确测定cv2的结果.在BW/黑白图像中查找对象?

使用一周的特定第一天将每日日期转换为每周

是否将dict转换为一个数据帧,每个值都有重复的键?

预分配一个无列表

Tkinter 窗口显示(无响应)但代码正在运行

使用自定义比较删除重复项

每次启动 Google Colab 时都必须安装所需的软件包吗?

异常被忽略是什么类型的消息?

Django Rest 框架 ListField 和 DictField

如何使用异步 for 循环遍历列表?

__iter__ 和 __getitem__ 有什么区别?

Python:如何在 Windows 资源管理器中打开文件夹(Python 3.6.2、Windows 10)

在 Visual Studio Code 中调试 Scrapy 项目