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

如何通过Dask Client重启指定Worker?避免重启整个集群

如何重启Dask集群中的指定单个/多个Worker

当然可以实现!Dask专门提供了针对单个或部分Worker的优雅重启方案,完全不用重启整个集群,完美解决你担心的“终止并行任务”问题。下面是具体的实现方法和注意事项:

核心方案:使用client.retire_workers()安全重启

retire_workers()是Dask为优雅下线Worker设计的API,它能让指定Worker完成当前任务后再退出,并且如果你的集群支持自动扩容(比如LocalCluster、云原生集群或基于任务队列的集群),还能自动重启新的Worker来替换下线的节点。

具体代码示例

  1. 先获取集群中所有Worker的地址:
# 获取当前所有Worker的地址列表
all_workers = list(client.scheduler_info()["workers"].keys())
  1. 选择你要重启的目标Worker(比如选第一个,或者指定具体地址):
# 示例:选择第一个Worker
target_workers = [all_workers[0]]
# 或者选择多个:target_workers = all_workers[:2]
  1. 执行退休并重启操作:
# retire指定Worker,完成当前任务后关闭并重启(集群支持的话自动启动新Worker)
client.retire_workers(
    workers=target_workers,
    close=True,       # 关闭Worker进程
    restart=True,     # 若集群支持自动管理,重启新Worker替换
    wait=True         # 等待Worker完成当前任务再退出(默认True,推荐保持)
)

不同集群场景的补充说明

  • 手动启动的Worker:如果你是通过终端命令dask-worker手动启动的Worker,retire_workers()会让它们安全退出,但不会自动重启。你需要手动重新执行对应的dask-worker命令来启动新的Worker。
  • 自动缩放集群:比如使用dask-cloudprovider(AWS/GCP/Azure)、dask-kubernetes或dask-jobqueue的集群,restart=True会触发自动补充新的Worker,无需手动干预。
  • 强制立即重启(不推荐):如果不需要等待Worker完成当前任务,可以设置wait=False,但这会中断正在运行的任务,仅适合紧急场景。

关键优势

相比client.restart()会重启整个集群、终止所有任务,retire_workers()的优势在于:

  • 仅针对指定Worker操作,不影响其他正常运行的Worker和任务
  • 等待目标Worker完成当前任务后再退出,避免任务中断
  • 可配合集群自动管理实现无缝重启,完美重置进程状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:28:17