2011-09-13 3 views
1

Je prévois de déployer un site dynamique qui nécessite que certaines tâches soient effectuées périodiquement en arrière-plan, disons toutes les heures ou deux. Les données que je dois produire dépendent strictement du résultat de ces requêtes.Récupération de données et gestion de cache asynchrones

Maintenant, le problème est que ces tâches nécessitent un certain laps de temps, par ex. 8-10 minutes: donc si un utilisateur demande une page, et donc qu'une certaine vue est appelée, et que cette tâche est toujours en cours, tout va mal. Donc, voici la question: que dois-je mettre en œuvre pour gérer ce problème? J'ai cherché et j'ai trouvé sur le céleri, mais je n'ai pas compris comment il pourrait être utilisé pour résoudre le problème ci-dessus et peut-être implémenter un système de cache qui intervient lorsque les tâches ne sont pas encore terminées.

Répondre

2

Une solution peut être la suivante: La vue servira les résultats mis en cache, lorsqu'une tâche est terminée, celle-ci mettra à jour les résultats mis en cache avec les nouveaux. Vous pouvez également utiliser le céleri de cette manière ici, lorsqu'une vue mise en cache est touchée et qu'elle doit être recalculée, une tâche de céleri se détache (la vue renvoie la valeur mise en cache).

Ici il y a un exemple intéressant sur une seule tâche à temps de céleri: http://ask.github.com/celery/cookbook/tasks.html

+0

Merci pour la réponse. Je suis allé chercher comment mettre à jour les résultats de cache de céleri et j'ai vu que c'était un peu de problème. J'ai trouvé il ya quelques minutes ce syfou.bitbucket.org/django-groupcache que j'ai vu mentionné ici stackoverflow.com/questions/2268417/... et il semble faire l'affaire. Je l'ai essayé tout de suite et ça fonctionne. Je suppose que je vais mettre le tout sous test pour le stresser et ensuite l'intégrer avec une tâche de céleri. – Nemoverflow

Questions connexes