Wanneer je Django Celery Beat gebruikt om taken in te plannen, is het overwegen van het gebruik van one-off: True een manier om ervoor te zorgen dat een taak precies één keer wordt uitgevoerd. Echter, er ontstaan vaak vragen over de status na uitvoering, vooral in verband met het beheer van het enabled veld. In deze post onderzoeken we de werking van one-off en de rol van het enabled veld, evenals manieren om deze effectief te gebruiken.


1. De rol van one-off in Celery Beat

De one-off optie in Celery Beat wordt gebruikt om ervoor te zorgen dat een geplande taak slechts één keer wordt uitgevoerd. Een taak die is ingesteld met one-off: True wordt na uitvoering niet opnieuw uitgevoerd en Celery Beat sluit deze taak uit van de uitvoer-lijst.

Relatie tussen one-off en planningsmethoden

  • clocked schema:

    Een manier om taken op een specifiek tijdstip uit te voeren. Zodra de uitvoertijd is verstreken, wordt de taak niet opnieuw uitgevoerd, waardoor het in wezen een one-off gedrag vertoont.

    Wanneer je one-off: True extra instelt: dit garandeert dat de taak niet opnieuw wordt geactiveerd, zelfs niet na het verstrijken van de tijd.

  • interval en crontab schema:

    Ontworpen om taken periodiek uit te voeren.

    Wanneer je one-off: True instelt: ongeacht de periodiciteit, zal de taak slechts één keer worden uitgevoerd.


2. Verandering van de enabled status na uitvoering

Standaardgedrag van het enabled veld

De waarde van enabled verandert niet automatisch na de uitvoering van de taak. Dat wil zeggen, zelfs als een taak is uitgevoerd met one-off: True, blijft enabled nog steeds True. Dit betekent:

  1. Celery Beat overweegt alleen taken waarvan enabled True is voor planning.
  2. Met de one-off instelling wordt de taak na uitvoering uitgesloten van de planning.

Daarom, zonder expliciet het enabled veld te wijzigen, zal de taak niet opnieuw worden uitgevoerd.

Een workflowdiagram dat one-off en enabled uitlegt

3. Moet ik enabled veranderen naar False?

Redenen om het niet te veranderen

  • Celery Beat zorgt er met alleen de one-off: True instelling voor dat de taak niet opnieuw wordt uitgevoerd.
  • Als ontwikkelaars de status van de taak goed begrijpen en beheren, is het veilig om enabled niet te wijzigen.

Situaties waarin veranderen voordelig kan zijn

  1. Versterking van veiligheid:

    Voorkomt dat iemand per ongeluk de one-off instelling verwijdert of wijzigt.

  2. Duidelijker maken van de intentie:

    Geeft duidelijk aan dat de taak is voltooid, zodat een beheerder de status van de taak gemakkelijker kan begrijpen.

  3. Optimalisatie van resourcebeheer:

    Als er veel taken zijn in de enabled: True status, kan dit helpen om de databasebelasting van Celery Beat te verlichten.

Hoe enabled te wijzigen

Na uitvoering van de taak kun je met een extra logica enabled naar False wijzigen. Bijvoorbeeld:

from django_celery_beat.models import PeriodicTask

def my_task():
    # Voer de taak uit
    ...
    # Wijzig de enabled waarde naar False na uitvoering
    task_name = "my_task_name"
    task = PeriodicTask.objects.get(name=task_name)
    task.enabled = False
    task.save()

4. Is alleen clocked schema voldoende?

clocked schema is ontworpen om een taak één keer op een specifiek tijdstip uit te voeren. Daarom zal, zodra de uitvoertijd verstrijkt, de taak niet opnieuw worden uitgevoerd, ook niet zonder one-off: True.

  • Wanneer je alleen clocked gebruikt:

    Na de verstrijking van de tijd wordt de taak automatisch gedeactiveerd.

    Let op, als de taak mislukt of handmatig niet opnieuw wordt geactiveerd, kan extra configuratie nodig zijn.

  • clocked + one-off: True:

    Dit garandeert dat de taak niet opnieuw wordt geactiveerd en drukt de intentie duidelijk uit.


5. Conclusie: Praktische instelgids

  • Als een taak slechts één keer moet worden uitgevoerd: stel one-off: True in om veiligheid te waarborgen.
  • Het is meestal niet nodig om enabled te wijzigen. Maar, indien nodig, kan het dus veranderen naar False om veiligheid en onderhoudsgemak te verbeteren.
  • Als alleen clocked voldoende is: dan is het niet noodzakelijk om one-off in te stellen.

Als je de instelmogelijkheden van Celery Beat goed benut, kan het beheren van taken veel efficiënter en veiliger worden. Zoek naar de optimale instelling die past bij de eisen van je project!