#python-3.x #celery
#python-3.x #сельдерей
Вопрос:
TL: DR Я хочу пометить результаты в серверной части.
У меня есть проект flask / celery, и я новичок в сельдерее. Пользователь отправляет пакет задач для работы с сельдереем. Celery сохраняет результаты в серверной базе данных SQL (таблица, автоматически созданная Celery, с именем celery_taskmeta).
Я хочу, чтобы пользователь мог видеть статус своего пакета и запрашивать результаты у серверной части.
Моя проблема в том, что все результаты находятся в одной таблице. Какие у меня есть варианты для маркировки этого пакета, чтобы пользователь мог различать пакеты?
Мои идеи:
- Могу ли я добавить ярлык к каждой задаче, например, «Партия Боба № 12», а затем запросить
celery_taskmeta
ее? - Могу ли я поместить каждый пакет в именованные внутренние таблицы, поэтому попросите Celery сохранить результаты в таблице с именем
task_12
?
Попытка с группами
Я попробовал следующий код для группировки результатов
job_group = group(api_get.delay(url) for url in urllist)
Но я не вижу никакого способа идентифицировать группу в бэкэнд / базе данных результатов
Попытка с именем задачи
В серверной части я вижу пустой заголовок столбца ‘name’, поэтому я подумал, что могу добавить туда произвольную строку:
@app.task(name="an amazing vegetable")
def api_get(url: str) -> tuple:
...
Но затем работник сельдерея выдает ошибку при запуске задачи:
KeyError: 'an amazing vegetable'
[2020-12-18 12:07:22,713: ERROR/MainProcess] Received unregistered task of type 'an amazing vegetable'.
Ответ №1:
Вероятно, самым простым решением является использование Group и использование группового результата для периодического опроса состояния группы.
A1: Что касается вопроса с меткой — да, вы можете «пометить» свою задачу с помощью функции пользовательского состояния.
A2: вы можете взломать, чтобы поместить каждую партию задач внутри внутренней таблицы, но я настоятельно рекомендую не связываться с этим. Если вы действительно хотите пойти по этому пути, создайте отдельную базу данных для этого конкретного использования.
Комментарии:
1. Привет @DejanLekic, я попробовал group и обновил свой вопрос. Я посмотрел на A1, обычное состояние, но я бы предпочел этого не делать, поскольку я хочу использовать состояния по умолчанию.