Параллельный запуск команд оболочки с использованием распределенного dask

У меня есть папка с множеством сценариев .sh. Как я могу использовать уже настроенный распределенный кластер dask для их параллельной работы?

В настоящее время я делаю следующее:

import dask, distributed, os

# list with shell commands that I want to run
commands = ['./script1.sh', './script2.sh', './script3.sh']

# delayed function used to execute a command on a worker
run_func = dask.delayed(os.system)

# connect to cluster
c = distributed.Client('my_server:8786')

# submit job
futures = c.compute( [run_func(c) for c in commands])

# keep connection alive, do not exit python
import time
while True:
    time.sleep(1)

Это работает, однако для этого сценария было бы идеально, если бы клиент мог отключиться, не заставляя планировщик отменить задание. Я ищу способ вычисления моих задач, который не требует активного клиентского подключения. Как это можно было сделать?


person Someone    schedule 29.03.2018    source источник


Ответы (1)


Вы видели http://distributed.readthedocs.io/en/latest/api.html#distributed.client.fire_and_forget? Это был бы способ обеспечить выполнение некоторых задач в кластере после ухода клиента.

Также обратите внимание, что у вас есть такие функции, как wait() или даже gather(), поэтому вам не нужны бесконечные циклы сна.

Однако обычно subprocess.Popen запускает дочерний процесс и не ждать его завершения, так что вам даже не нужно ничего сложного из dask, поскольку, похоже, вас не интересует какой-либо вывод вызова.

person mdurant    schedule 07.04.2018
comment
Я только что понял, что fire_and_forget также хорошо документирован здесь: dask.pydata .org / en / latest / futures.html # выстрелил и забыл - person Someone; 13.04.2018