Я использую 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:
Я мог бы иметь плагин планировщика, который отправляет все передачи на сервер AMPQ (RabbitMQ). Мне нравится надежность и возможность подписываться на определенные сообщения, которые выводит планировщик, и зная, что каждое сообщение будет обработано. Я не уверен, как я мог получить результат сам с этим методом. Я мог бы вручную добавить узел в конец каждого графика, чтобы сохранить результат, но я бы предпочел, чтобы он был за кадром.
get_task_stream на отдельном сервере или использовать его каким-либо образом. При этом кажется, что я мог бы пропустить некоторые сообщения, если бы сервер вышел из строя, так что это кажется худшим вариантом 1.
Другой вариант?
Как лучше всего это сделать?
Редактировать: только что протестировано, и кажется, что когда клиент, отправивший задачу, закрывается, все созданные ею фьючерсы перемещаются из обработки в забытое, даже если вызывается fire_and_forget.