@NyxDeveloper

Как в периодических задачах Celery использовать django orm?

У меня есть приложение на django, в котором нужно раз в неделю создавать отчет из информации в базе данных. Я настроил celery, в логах пишется, что задача выполняется, однако в базе данных ничего не меняется.
Я попробовал сделать тестовую задачку и проверить, будет ли меняться вообще хоть что-то.
# файл app/tasks.py
from vkmt_api.celery import app
from authentication.models import User

@app.task
def test_task():
    user = User.objects.get(username="test")
    user.first_name = user.first_name + "1"
    user.save()


# файл mainapp/celery.py

import os
from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')
app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

app.conf.beat_schedule = {
    "test-task": {
        "task": "reports.tasks.test_task",
        "schedule": crontab(minute="*/1")
    }
}


# настройки в файле settings.py

REDIS_HOST = '0.0.0.0'
REDIS_PORT = '6379'

CELERY_BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_BROKER_TRANSPORT_OPTION = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'


Исходя из вышеприведенного кода, следует максимально простая логика, раз в минуту должна выполняться функция test_task() и пользователю test к имени должна добавляться единица. То есть, через 5 минут после запуска приложения у пользователя test имя будет "name11111".
Скажите, что я делаю не так?
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
@NyxDeveloper Автор вопроса
В общем, при таком подходе нужно не через beat запускать, а через worker. Что, на самом деле, странно, учитывае, что для периодических задач по расписанию официальная документация говорит использовать именно beat.
https://docs.celeryproject.org/en/stable/django/fi...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы