我的团队正在尝试通过关闭所有内核、打开 Jupyterlab 内的终端来削减云成本预算。通过导航到打开的内核部分,然后单击内核和终端的
Shut Down All
可以轻松完成此操作。当此方法有效时,其他用户正在工作,他们只需重新启动其内核即可。我们的想法是让一个脚本在每个人都停止工作的某个时刻关闭所有内核和终端。
话虽如此,我在命令行中关闭单个 jupyterlab 内核时遇到了一些困难。 是否可以通过命令行关闭 jupyter 内核?我想要类似以下内容:
jupyter --change_kernel None file.ipynb
kill -9 {ipynb_pid}
.修改元数据以具有
No kernel
。ipynb
文件的 json 来更改内核。 IE。 jq '.metadata.kernel="None"' my_file.ipynb > my_file.ipynb
。这会导致非常棘手的覆盖问题。另外,如果有未保存的更改,则效果不佳。
这是我编写的一个 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
}
然后您可以通过将 kernel_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
}
让我知道进展如何。