Получить работающего работника по параметрам в сельдерее - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь реализовать трудоемкие вычисления с помощью Celery (v 3.1.25).Мне нужно получить уже работающего работника по параметру, который прошел при запуске задачи.

Клиент передает company_id на сервер, и Celery запускает работника с заданным параметром.Может быть много клиентов, которые передают один и тот же company_id, поэтому я должен проверить, что процесс еще не запущен.Если он выполняется, задача не должна планироваться, потому что результат выполнения одного и того же процесса всегда один и тот же, и мы должны сказать ему, что задача уже выполняется.

@celery_app.task(bind=True)
def calculate(self, company_id):
    obj_list = get_objects(company_id)

    for i, obj in enumerate(obj_list):
        self.update_state(state='PROGRESS', meta={'current': i, 'total': len(obj_list)})

        result = calc(
            registry=registry_key,
            company_id=company_id,
        )

    return result

Я думаю о сохранениитекущий статус в Postgres базе данных, где модель будет work_id, status (PROGRESS/SUCCESS), start_time, finish_time.В этом случае вопрос заключается в том, как справиться с тем, что статус работы изменился?И правильно ли хранить такую ​​информацию в базе данных?Есть ли другие варианты решения этой проблемы?

Я смотрел на celery-Once , но не нашел там метода, который мог бы сказать мне, что этот процесс запущен (я хочу сообщить об этом пользователю).

Может быть, я мог бы что-нибудь сделать с Redis?

...