Django: Как запустить задачу celery только при запуске?

У меня есть приложение django, которое использует celery для выполнения задач.

Sometimes, I have a "hard shutdown" and a bunch of models aren't cleaned up. I created a task called clean_up that I want to run on start up.

Здесь находится tasks.py

from my_app.core import utils
from celery import shared_task


@shared_task
def clean_up():
    f_name = clean_up.__name__


    utils.clean_up()

Вот как выглядит celery.py:


import os

from celery import Celery
from celery.schedules import crontab
from datetime import timedelta


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_app.settings")

app = Celery("proj")


app.config_from_object("django.conf:settings", namespace="CELERY")

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

app.conf.beat_schedule = {

    "runs-on-startup": {
        "task": "my_app.core.tasks.clean_up",
        "schedule": timedelta(days=1000),
    },
}


@app.task(bind=True)
def debug_task(self):
    print(f"Request: {self.request!r}")


How can I change celery.py to run clean_up only on start up?

Дополнительная информация:

  • this is in a docker compose, so by "hard shutdown" I mean docker compose down
  • By "on start up" I mean docker compose up

вы искали сигнал:

tasks.py добавьте следующий код:

from celery import signals

@signals.worker_ready.connect
def clean(**kwargs):
    ...
    loggert.info('worker_ready')
Вернуться на верх