2016-04-22 1 views
0

J'ai un problème avec mon application de céleri-django. Supposons que j'ai deux modèles liés - Transaction et compte. Je pousse les transactions sur mon API. Ce que je veux réaliser, c'est calculer le solde pour un compte spécifié. J'ai une tâche de céleri qui calcule l'équilibre. Le problème est que j'ai besoin d'une minuterie pour chaque compte, par exemple. 60 secondes. Lorsque la transaction arrive pour le même compte, le temporisateur est à nouveau défini sur 60. Je veux faire de cette façon parce que je ne veux pas exécuter la même tâche plusieurs fois. Lorsque les transactions pour un compte spécifié ne viendront pas pendant 60 secondes, alors la tâche devrait être exécutée.Application Django Céleri avec minuterie

Des suggestions architecturales comment y parvenir? En fait, je n'ai aucune idée de comment configurer ces "minuteurs".

Merci pour les réponses!

Répondre

0

Vous pouvez suivre l'aproche de django-celery-transactions. Ils subclass the Task class pour que la logique d'exécution soit personnalisée.

Pour votre cas, vous devez personnaliser apply_async pour vérifier si des tâches en attente doivent être exécutées au cours des 60 secondes suivantes (pour cela, vous utiliserez Celery API for inspecting workers). S'il existe déjà une tâche planifiée, vous pouvez ignorer l'exécution de la tâche en cours; sinon, définissez une durée d'exécution de 60 secondes dans le futur et appelez avec elle la méthode super().apply_async(...).