2014-06-16 6 views
-1

Dans mon application, les utilisateurs ont des crédits (points) liés à leur abonnement mensuel. J'aimerais recharger automatiquement des crédits pour chaque utilisateur à une date précise chaque mois. Notez que pour chaque utilisateur, cette date est différente (en fonction de la date de souscription)Tâches planifiées dans Django sans céleri?

j'ai entendu parler Céleri pour les tâches planifiées, et il semble combler mes besoins, mais il est peut-être un peu exagéré de peu. Y a-t-il quelque chose de plus simple (et peut-être intégré dans Django) pour faire cela?

+1

Vous pouvez utiliser le planificateur de tâches cron (linux) ou Windows (ou quel que soit son nom) pour planifier un script personnalisé, mais demander un outil recommandé est hors sujet pour SO. – knbk

Répondre

3

Vous pouvez créer un service qui peut vérifier vos enregistrements et effectuer les opérations dont vous avez besoin.

Ceci est par exemple simple d'un fichier qui est dans le répertoire racine du projet comme ceci:

  • manage.py
  • my_service.py
  • project_name

donc la source code de my_service.py pourrait être:

#!/usr/bin/env python 
import os 
import sys 
import time 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings") 

form django.contrib.auth.models import User 
while True: 
    rows = User.objects.filter(created___startswith=...) 
    if not rows: 
     print 'sleep...' 
     time.sleep(10) 
     continue 
    [you actions should be here] 

puis de l'exécuter en arrière-plan par la commande python my_service.py.

Ou vous pouvez ajouter ce script dans cron job (Si oui, alors cette partie sera le changement):

Remarque: si vous voulez ajouter dans cron job. vous devez changer while True à boucle limitée comme ceci:

form django.contrib.auth.models import User 
rows = User.objects.filter(created___startswith=...) 
if not rows: 
    sys.exit(1) 
while R in rows: 
    [you actions should be here] 

Maintenant pour l'ajouter dans votre tâche cron à exécuter par 1 heure, un coup d'oeil dans this link il a beaucoup d'exemples à ce sujet.

Remarque: Ceci est juste un exemple. vous devriez changer le nom de ces modèles en noms + requêtes.

+0

Merci pour cette idée. Pas très très élégant car ça va faire une requête toutes les XX secondes sur ma BD pour rien, mais ça a le mérite d'être simple :) Un bon début. –

+0

@DavidW. J'étais dans plusieurs projets que le système devrait traiter toutes les entrées des utilisateurs qui sont dans la table 'entry' par seconde. J'ai essayé par ces moyens. ;) – Mortezaipo