Как я могу получить результат вычисления Dask на другом компьютере, чем тот, который его представил? - PullRequest
2 голосов
/ 04 апреля 2019

Я использую Dask за сервером Django, и основные настройки, которые у меня есть, кратко изложены здесь: https://github.com/MoonVision/django-dask-demo/, где клиент Dask можно найти здесь: https://github.com/MoonVision/django-dask-demo/blob/master/demo/daskmanager/daskmanager.py

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

Прямо сейчас, если веб-сервер умрет, клиент будет удален, и задача будет остановлена, поскольку ни один клиент еще не удерживает будущее. Я могу обойти это, используя fire_and_forget , но у меня нет способа сохранить состояние задачи и результат после ее завершения.

Способы, которые я вижу, чтобы отслеживать статус и сохранять результат после fire_and_forget:

  1. Я мог бы иметь плагин планировщика, который отправляет все передачи на сервер AMPQ (RabbitMQ). Мне нравится надежность и возможность подписываться на определенные сообщения, которые выводит планировщик, и зная, что каждое сообщение будет обработано. Я не уверен, как я мог получить результат сам с этим методом. Я мог бы вручную добавить узел в конец каждого графика, чтобы сохранить результат, но я бы предпочел, чтобы он был за кадром.

  2. get_task_stream на отдельном сервере или использовать его каким-либо образом. При этом кажется, что я мог бы пропустить некоторые сообщения, если бы сервер вышел из строя, так что это кажется худшим вариантом 1.

  3. Другой вариант?

Как лучше всего это сделать?

Редактировать: только что протестировано, и кажется, что когда клиент, отправивший задачу, закрывается, все созданные ею фьючерсы перемещаются из обработки в забытое, даже если вызывается fire_and_forget.

1 Ответ

1 голос
/ 04 апреля 2019

Возможно, вы захотите взглянуть на координационные примитивы Dask, такие как Queues и Pub / Sub.Я думаю, что постановка вашего фьючерса в очередь решит вашу проблему.

https://docs.dask.org/en/latest/futures.html#coordination-primitives

...