10
votes

Django CELERY CRONTAB toutes les 30 secondes - Est-ce même possible?

est-il possible d'exécuter le Django célery crontab très 30 secondes pendant des heures spécifiques ?

Il n'y a que des paramètres pendant des minutes, des heures et des jours.

J'ai le travail de crontab, mais j'aimerais le faire fonctionner toutes les 30 secondes, par opposition à chaque minute.

Alternativement ...

est-il possible de transformer l'intervalle pendant 30 secondes et d'allumer le calendrier d'intervalle uniquement pendant une certaine période de la journée?


0 commentaires

4 Réponses :


4
votes

Si vous vraiment avez besoin de le faire et que vous avez besoin d'une solution rapidement, vous pourriez avoir recours à ajouter: dormir dans votre script. (Évidemment, vous devrez ajouter un paramètre à votre script pour configurer l'heure de veille à 0 ou 30 secondes et ajouter le script deux fois à Crontab, une fois avec 0 comme paramètre, d'autre part avec 30).

S'il vous plaît ne vous votez pas à cela! C'est une solution, bien que je ne termine pas très clair que ce n'est pas une solution idéale.


0 commentaires

13
votes

Le tout premier exemple qu'ils ont dans la documentation est . ..

Exemple: exécutez la tâche Tâches.Ajouter toutes les 30 secondes. em> p>

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "tasks.add",
        "schedule": timedelta(seconds=30),
        "args": (16, 16)
    },
}


2 commentaires

J'en ai besoin pour courir toutes les 30 secondes pendant des heures spécifiques . Moi aussi je suis tombé sur le le tout premier exemple qu'ils ont dans la documentation .


Je cherche également une solution à cela (et est venu sur cet article). serait vraiment sympa si TimerDelta pourrait être combiné avec Crontab.



2
votes

J'irais avec votre solution alternative en planifiant une autre tâche pour activer / désactiver la tâche principale: xxx

puis planifie simplement cette tâche à l'aide d'un crontab pendant les heures que vous devez basculer. Sinon, vous pouvez avoir une tâche programmée pour l'allumer et l'éteindre pour l'éteindre et ne pas traiter la logique de basculement.

espère que cela aide.

SC < / p>


0 commentaires

2
votes

Vous pouvez simplement utiliser

from datetime import timedelta

@periodic_task(run_every=timedelta(seconds=30))
def thirty_second_task():
   now = datetime.now()
   if now.hour == 12 or now.hour == 9:
       your code goes here`


0 commentaires