Approche Simple pour le lancement en tâche de fond dans Django
J'ai un site web de Django, et une page a un bouton (ou un lien) qui lorsqu'il est cliqué va lancer une assez longue tâche en cours d'exécution. Évidemment, je veux lancer cette tâche comme une tâche de fond et immédiatement renvoyer un résultat à l'utilisateur. Je veux mettre en œuvre ce à l'aide d'une approche simple qui ne va pas m'obliger à installer et apprendre une toute nouvelle architecture de messagerie comme le Céleri par exemple. Je ne veux pas utiliser le Céleri! Je veux juste utiliser une approche simple que je peux mettre en place et à exécuter au cours de la prochaine demi-heure ou ainsi. N'est-ce pas là une façon simple de le faire dans Django sans avoir à ajouter (encore un autre) 3ème partie package?
Remarque: Le serveur de mise à jour du pourcentage de la valeur n'est que sur le serveur [par exemple, une valeur en DB]. Cela peut être interrogé si l'utilisateur accède à la page donnée. Aussi cela dépendra de la façon dont l'infrastructure peut gérer les connexions simultanées. Le processus en cours d'exécution peut bloquer, de sorte que vous pouvez avoir besoin de regarder dans quelque chose comme une tornade.
Je doute très bien que tout ce que vous écrivez vous-même va être plus simple que d'installer le Céleri et l'avoir fait avec elle.
"Je doute fort que ce que vous écrivez vous-même va être plus simple que d'installer le Céleri et l'avoir fait avec elle." - allons-voir - je ne peux penser à beaucoup de choses plus simple que le Céleri. C'est un peu beaucoup de logiciel, mais c'est une grande boule de code peut gérer à grande échelle, de haute-volume réparti les tâches. Elle doit être installe d'une valeur-clé magasin, un courtier et dieu sait quoi d'autre. Si vous voulez juste pour s'exécuter en tâche de fond alors je cherche autre chose.
OriginalL'auteur Marc | 2014-02-21
Vous devez vous connecter pour publier un commentaire.
Si vous êtes prêt à installer un 3ème partie de la bibliothèque, mais vous voulez quelque chose d'un ensemble beaucoup plus simple que de Céleri, découvrez Redis File d'attente. Il ne nécessite Redis, ce qui est assez facile en soi, mais qui peut fournir beaucoup d'autres avantages.
RQ lui-même a presque zéro configuration. Il est étonnamment simple.
Références:
OriginalL'auteur John Lehmann
Il suffit d'utiliser un fil.
Voir cette question pour plus de détails:
Peut Django faire du multi-thread fonctionne?
OriginalL'auteur Benjamin Toueg
Ont un coup d'oeil à django-fond-tâches - c'est exactement ce dont vous avez besoin et n'a pas besoin de tous les services supplémentaires pour être en cours d'exécution comme RabbitMQ ou Redis. Il gère une tâche de la file d'attente dans la base de données et un Django gestion de commande qui vous permet d'exécuter une ou une tâche cron.
Le lien pointe vers un module qui permet de résoudre le problème, pas une description de la façon de résoudre le problème. Je ne sais pas de quelle autre façon de réécrire le post, peut être avez vous quelques conseils?
Ce module fonctionne actuellement uniquement avec Django 1.4 à 1.8.
Nous avons poussé plus stable et robuste version (1.1.6) de django-fond-des tâches à l'Python Package Index aujourd'hui. Cela a un support pour le dernier plus grand Django version. Notes de version: github.com/arteria/django-background-tasks/releases/tag/v1.1.6
OriginalL'auteur user226114