Создание PeriodicTask в celery django

Мне нужно отправлять уведомления с определенным интервалом, когда экземпляр модели Ticket был создан. Для этого я решил использовать celery-beat.

Я создал signals.py, где создаю инстанс PeriodicTask. Когда я создаю новый экземпляр Ticket, экземпляр PeriodicTask создается в DB, но задача не запускается. Что я делаю не так?

signals.py

from datetime import datetime
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Ticket
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json

@receiver(post_save,sender=Ticket)
def notification_handler(sender, instance, created, **kwargs):
    if created:
        interval, created = IntervalSchedule.objects.get_or_create(every=10, period='seconds')
        task = PeriodicTask.objects.create(interval=interval,enabled=True, name='notification_' + str(instance.id), task="create", args=json.dumps((instance.id, )))

tasks.py

from celery import shared_task


@shared_task(name="create")
def create(data):
    print("Some logic here")

celery.py

import os

from celery import Celery

# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'helpdesk.settings')

app = Celery('helpdesk')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

setting.py

CELERY_BROKER_URL = 'redis://redis:6379/0'

Команды, которые я использую для запуска celery и celery-beat:

beat:

celery -A helpdesk beat

celery:

celery -A helpdesk worker -l INFO --pool=solo

Кажется, я нашел ответ. Нужно запустить celery-beat с помощью этой команды:

celery -A <your_project_name> beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler

Вернуться на верх