[英]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.