2017-10-18 11 views

Répondre

0

dépend de l'échelle et de vos besoins.

Vous devrez utiliser django-céleri-beat pour les tâches périodiques: http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#beat-custom-schedulers

Je honnêtement créer une tâche de céleri qui relierait toutes les 3-5 minutes.

models.py

class Foo(models.model): 
     created_at = models.DateTimeField(auto_add_now=True) 
     expiration_date = models.DateTimeField() 

views.py

import datetime 
from django.utils import timezone 

def add_foo(): 
    # Create an instance of foo with expiration date now + one day 
    Foo.objects.create(expiration_date=timezone.now() + datetime.timedelta(days=1)) 

tasks.py

from celery.schedules import crontab 
from celery.task import periodic_task 
from django.utils import timezone 

@periodic_task(run_every=crontab(minute='*/5')) 
def delete_old_foos(): 
    # Query all the foos in our database 
    foos = Foo.objects.all() 

    # Iterate through them 
    for foo in foos: 

     # If the expiration date is bigger than now delete it 
     if foo.expiration_date < timezone.now(): 
      foo.delete() 
      # log deletion 
    return "completed deleting foos at {}".format(timezone.now()) 
+0

Existe-t-il un autre moyen d'y parvenir? sans céleri. Vous voulez juste savoir les options;) ou la file d'attente de tâches est le seul moyen –

+0

@manishadwani Votre question a demandé comment cela devrait-il être fait via 'celery' et a la balise' celery'. Assurez-vous de modifier la question afin qu'elle reflète cela aussi. Une autre solution possible consiste à configurer un travail cron qui exécuterait une commande 'manage.py' via bash, ce qui ferait la même chose. Céleri est construit pour des cas d'utilisation comme ceux-ci. Je vous conseille de le faire via le céleri, mais si quelqu'un d'autre a une alternative, attendez qu'ils répondent! :) –

+0

Merci pour la réponse rapide, je voudrais jeter un oeil à ce –