You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell批量部署Databricks Workspace时第二次执行死锁报错

批量创建Databricks Workspace时第二次循环触发死锁错误的解决办法

问题场景

通过YAML流水线运行PowerShell脚本批量部署Databricks Workspace,首次循环能成功创建资源组、存储账户及Databricks Workspace,但第二次循环时,除Databricks Workspace外其他资源均可创建,抛出死锁错误。

相关代码

创建Databricks的函数

function Create-Databricks {
    param (
        [string] $rgName,
        [string] $dbName
    )
    
    az extension add --name databricks
    az databricks workspace create --resource-group $rgName --name $dbName --location westeurope --output none

}

批量创建的循环逻辑

foreach ($key in $iniContent["trainees"].Keys) {
    # 获取学员姓名
    $traineeName = $iniContent["trainees"][$key]

    # 设置Azure上下文
    # az account set --subscription "721fd46a-a810-4202-aa25-8b58b0410e1b"

    $names = $traineeName -split ' '
    $lastname = ($traineeName -split ' ')[1].Substring(0, [Math]::Min(5, $traineeName.IndexOf(" "))).ToLower()
    # 资源组名称
    $resourceGroupName = "rg-academy-databricks-$lastname"
    # 存储账户名称
    $storageName = "stacademy$lastname"
    # Databricks工作区名称
    $databricksName = "dbs-academy-course-$lastname-001"
    $accessconnectorName = "dbscon-academy-course-$lastname-001"
    ....

    # 检查Databricks工作区是否已存在
    $dbExists = Get-AzDataBricksWorkspace -ResourceGroupName $resourceGroupName -Name $databricksName -ErrorAction SilentlyContinue
    if (-not $dbExists) {
        Write-Output "Databricks工作区 $databricksName 不存在,开始创建..."
        # 调用函数创建Databricks工作区
        Create-Databricks -rgName $resourceGroupName -dbName $databricksName -tags $tags
    }
    else {
        Write-Output "Databricks工作区 $databricksName 已存在,跳过创建步骤。"
    }
}

报错信息

WARNING: 默认已启用预览版扩展安装,该设置将于2024年5月禁用。如需启用请使用'--allow-preview true',仅安装稳定版请使用'--allow-preview false'。
WARNING: 扩展'databricks' 0.10.2已安装。
ERROR: 命令因意外错误失败,回溯信息如下:
ERROR: 在2811310367824位置检测到_ModuleLock('msrest.exceptions')死锁

回溯 (最近的调用最后):

文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", 行233, in invoke
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", 行664, in execute
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", 行731, in _run_jobs_serially
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", 行712, in _run_job
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py", 行1035, in call
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/aaz/_poller.py", 行108, in result
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/core/tracing/decorator.py", 行76, in wrapper_use_tracer
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/aaz/_poller.py", 行130, in wait
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/aaz/_poller.py", 行83, in _start
文件 "C:\Program Files\Common Files\AzureCliExtensionDirectory\databricks\azext_databricks\aaz\latest\databricks\workspace_create.py", 行206, in _execute_operations
self.pre_operations()
文件 "C:\Program Files\Common Files\AzureCliExtensionDirectory\databricks\azext_databricks\custom.py", 行38, in pre_operations
from msrestazure.tools import is_valid_resource_id, resource_id
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\msrestazure/init.py", 行28, in
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\msrestazure/azure_configuration.py", 行34, in
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\msrest/init.py", 行28, in
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\msrest/configuration.py", 行38, in
文件 "D:\a_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\msrest/universal_http/init.py", 行53, in
文件 "", 行1173, in _find_and_load
文件 "", 行171, in enter
文件 "", 行116, in acquire
_frozen_importlib._DeadlockError: 在2811310367824位置检测到_ModuleLock('msrest.exceptions')死锁

解决办法

  • 提前安装Databricks扩展:把az extension add --name databricks移到循环外执行,避免每次循环都尝试安装扩展,减少模块加载冲突。修改后的代码示例:
# 在循环前仅执行一次扩展安装
az extension add --name databricks --allow-preview false

function Create-Databricks {
    param (
        [string] $rgName,
        [string] $dbName
    )
    
    az databricks workspace create --resource-group $rgName --name $dbName --location westeurope --output none

}
  • 改用PowerShell Az模块创建工作区:替换Azure CLI命令为New-AzDatabricksWorkspace cmdlet,避免两种工具间的模块加载冲突。示例:
function Create-Databricks {
    param (
        [string] $rgName,
        [string] $dbName
    )
    
    New-AzDatabricksWorkspace -ResourceGroupName $rgName -Name $dbName -Location westeurope
}
  • 添加循环延迟:在每次创建Databricks工作区后添加短暂延迟,缓解连续操作导致的资源锁定问题:
Create-Databricks -rgName $resourceGroupName -dbName $databricksName -tags $tags
Start-Sleep -Seconds 10

内容的提问来源于stack exchange,提问作者play_something_good

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:00:12