簡體   English   中英

工作完成后終止工作人員

[英]Terminating dask workers after jobs are done

我正在嘗試在集群上使用 dask,並且我有興趣在所有工作完成后立即終止所有工作人員。 我試圖用 retire_workers 方法做到這一點,但這似乎並沒有殺死工人。 這是一個例子。

import time
import os
from dask.distributed import Client

def long_func(x):
    time.sleep(2)
    return 1

if __name__ == '__main__':
    C = Client(scheduler_file='sched.json')
    res = []
    for _ in range(10):
        res.append(C.submit(long_func, _))
    for r in res:
        r.result()
    workers = list(C.scheduler_info()['workers'])
    # C.run(lambda: os._exit(0), workers=workers)
    C.retire_workers(workers=workers, close_workers=True)

調度程序和工作人員使用以下命令啟動:

dask-scheduler --scheduler-file sched.json 
dask-worker --scheduler-file sched.json --nthreads=1 --lifetime='5minutes'

希望在執行上面的 python 代碼后,worker 會終止(20 秒后),但它不會,停留整整 5 分鍾。 任何建議如何解決?

這將關閉連接的調度程序並退休工人:

C.shutdown()

我建議使用上下文管理器來管理集群 - 它既漂亮又干凈。 當涉及到 RAM memory 時,我遇到了問題,在本地工作時,我的計算機被最大化並停止運行,但這是我經常使用的一個示例:

# start our Dask cluster
from dask.distributed import Client,LocalCluster

if __name__ == '__main__':
    cluster = LocalCluster()
    
    with Client(cluster) as client:
        print("scheduler host: ", client.scheduler.address)
        # do some stuff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM