Завершение работы dask workers после выполнения заданий

#python #parallel-processing #cluster-computing #dask

#python #параллельная обработка #кластерные вычисления #dask

Вопрос:

Я пытаюсь использовать 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 рабочий завершит работу (через 20 секунд), но этого не происходит, оставаясь на целых 5 минут. Любой совет, как это исправить?

Ответ №1:

Я бы рекомендовал использовать диспетчер контекста для управления кластером — он приятный и чистый. У меня были проблемы, когда дело доходило до максимального использования оперативной памяти и зависания моего компьютера при локальной работе, но вот пример того, что я часто использую:

 # 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

 

Ответ №2:

Это приведет к завершению работы подключенного планировщика и удалению рабочих:

 C.shutdown()
 

Комментарии:

1. Вероятно, вы захотите также выполнить запуск C.close() после этого, чтобы избежать получения сообщений об отсутствующем планировщике.