Разрешить пользователю создавать периодические задачи сельдерея

Я хочу спросить вас об использовании сельдерея и Redis в приложении django. Я изучаю сельдерей около 2 дней и все еще немного запутался: / Я установил сельдерей и Redis, и он работает нормально. Моя проблема в том, что я хочу, чтобы пользователь создавал, обновлял и приостанавливал периодические задачи. Я прочитал эту статью - http://kindshofer.net/2016/11/19/dynamically_adding_a_periodic_task_to_celery.html и этот вопрос - Как динамически добавлять/удалять периодические задачи в Celery (celerybeat) много других статей, но не таких полезных, как эти две), и оказывается, что мне нужно использовать django-celery. Я подумал, что это отличный вариант, но потом прочитал (здесь --> https://github.com/celery/django-celery ), что django-celery использует бэкенд результатов django (это означает — моя БД, верно? И я хочу использовать Redis!). Можно ли использовать django-celery с Redis? Может быть, с django-celery мне не нужно использовать Redis? Может быть, есть какой-то другой способ позволить пользователю создавать периодические задачи? Мне очень нужно, чтобы мои периодические задачи были быстрыми и легкими, потому что их будет много и они должны быть безупречными (поэтому я и подумал, что нужно их куда-то пихать). Буду очень признателен за любые предложения!


person Marysia    schedule 19.09.2017    source источник


Ответы (2)


Быстрый и легкий и Redis == Python RQ. Тем не менее, приостановка работы может быть проблемой.

По вопросу Celery: бэкэнд результатов хранит только результаты. Он не справляется с очередями. Но даже тогда вы можете отправить результаты в Redis:

CELERY_RESULT_BACKEND = 'django-cache'

Настройте кеш:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

Однако причина использования бэкенда django-db заключается в том, что можно создавать наборы запросов по результатам. Как правило, это более полезно, так как результаты отображаются в представлениях, а задания — нет. Возможность агрегировать результаты (например, среднее время выполнения задания) и создавать графики очень полезно делать в Django и гораздо проще выполнить с помощью ORM, чем самостоятельно сортировать/агрегировать этот материал в python с хранилищем ключей/значений.

person Melvyn    schedule 19.09.2017

Я думаю, вы вносите некоторую путаницу ... Celery нуждается в сервере Redit в качестве брокера сообщений, и эти 2 вещи должны быть установлены глобально в вашей системе. Чтобы интегрировать эти 2 инструмента с установленным вами django (лучший выбор будет в вашей виртуальной окружение) django_celery_beat для периодических задач с crontab и django_celery_results для хранения задач Celery с помощью Django...

Конечно, можно позволить пользователю запускать и создавать настраиваемые периодические задачи. Вы можете (в своем шаблоне, с формой) принимать пользовательский ввод и, в своих представлениях, принимать этот ввод и передавать его функции в ваших задачах. .py файл.. В файле tasks.py вы можете создать функцию, которая создает задачи!

Это руководство очень полезно: https://github.com/codingforentrepreneurs/Guides/blob/master/all/Celery_Redis_with_Django.md

person Rodriguez David    schedule 19.09.2017