2017-08-03 3 views
0

Je sais qu'il y a des questions sur "comment faire une tâche périodique dans Django" comme this post. Mais je me demande quelle serait la meilleure option, d'en utiliser une des options mentionnées dans ce post (Celerity ou cron surtout) ou de traiter la tâche périodique à partir du Javascript/jQuery.Tâche périodique Django: Celerity vs Javascript/jQuery

Ce que je veux accomplir est simplement d'exécuter une tâche tous les jours à un certain moment. Pour appeler une fonction à partir de "view.py". Cette fonction va se connecter à une URL, télécharger un fichier et rechercher dans ce fichier pour plus d'informations, puis le stocker dans la base de données. Après cela, actualisez la page d'accueil avec les nouvelles informations.

Quels seraient les avantages et les inconvénients?

+0

Vous devez mentionner la situation et l'endroit exact où vous souhaitez l'appliquer. Les deux approches sont correctes pour des situations différentes –

+0

Oh oui désolé, je suis allé éditer ma question –

+0

@ArpitSolanki Fait, désolé encore –

Répondre

0

Je ne vois pas comment le javascript côté client pourrait être d'une aide ici (et si elle est en cours d'exécution côté serveur pourquoi utiliser javascript du tout?)

Si vous avez d'autres utilisations pour le céleri dans votre projet, alors l'utiliser pour exécuter des tâches planifiées est logique, et le 'pro' est qu'il ne nécessite aucune configuration manuelle de crontab au déploiement. Maintenant, si c'est seulement pour exécuter cette seule opération à installer et à configurer (et à exécuter!), La pile de céleri entière (céleri + rabbitmq + redis) pourrait être juste trop comparée à une tâche cron ordinaire (ou n'importe quel planificateur existant). votre système). En outre, si la tâche à exécuter n'est pas liée au cycle de requête/réponse HTTP, elle n'a rien à voir avec vos vues. Par défaut, django-admin startapp crée un module avec les modules views.py, models.py et urls.py, mais vous pouvez ajouter autant de modules arbitraires que vous le souhaitez. Pour les scripts qui doivent être exécutés à partir de la ligne de commande (ce qui est le cas pour cronjobs), la solution idiomatique consiste à les écrire sous la forme custom management commands.

1

L'exécution d'une tâche périodique à partir de javascript n'est certainement pas une option, car elle aura besoin de votre frontend pour appeler vos vues et exécuter la tâche. Ma suggestion serait d'utiliser Celery pour exécuter une tâche périodique car il est simple à installer et dans votre cas, il ne vous faudra que quelques lignes de code pour exécuter la tâche.

est un exemple de la façon d'exécuter ci-dessous une tâche périodique:

from celery.task.schedules import crontab 
from celery.decorators import periodic_task 

@periodic_task(run_every=crontab(minute=0, hour=0) ) 
def every_monday_morning(): 
    print("Execute every day at midnight") 

Réfs: docs

+0

Merci pour votre réponse rapide, je suis en mesure de le tester. Du script Python différent dans un projet django (view.py, urls.py, models.py) je suppose que celui dans lequel je devrai ajouter ce code sera le "views.py" mais je ne suis pas sûr . Si vous pouviez confirmer s'il vous plaît. –

+0

J'ai remarqué que les "Refs" auxquels vous faites référence sont une ancienne version, la mise à jour sera la suivante [http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html] , ai-je tort? –

+0

Votre lien est bon. Toutes mes excuses pour l'ancien lien. Quel que soit le code que vous voulez exécuter tous les jours, ajoutez-le à la fonction mentionnée ci-dessus, puis démarrez le céleri. –