2016-04-21 1 views
4

Je dois appeler les deux tâches de apply_async suivantes:céleri django appelle seulement 1 des 2 apply_async tâche

escalate.apply_async((e.id), countdown=3) 
escalate.apply_async((e.id), countdown=3) 

Ma mise en œuvre des tâches ressemble à:

@app.task 
def escalate(id, group): 

     escalation_email, created = EscalationEmail.objects.get_or_create() 
     escalation_email.send() 

    return 'sup email sent' 

Je dirige le travail avec la commande suivante :

celery -A proj worker -l info --concurrency=10 

Le problème est que lorsque je regarde le travailleur, seulement 1 tâches est reçu, puis seulement 1 su dépasse. En outre, seulement 1 email envoie.

Il semble que la deuxième tâche d'escalade s'exécute la plupart du temps.

Comment puis-je m'assurer que ces tâches fonctionnent toutes les deux avec fiabilité dans 100% des cas?

+0

Comment utilisez-vous celery? Essayez d'ajouter --concurrency = 2 –

+0

@SebastianSmolorz J'appelle le worker avec: célery -A proj worker -l info --concurrency = 10, mais il exécute seulement l'une des tâches. Quand je lance deux travailleurs différents, alors il gère les deux tâches. Le problème reste, que se passe-t-il si 3 tâches sont appelées, le 3ème ne s'exécuterait pas s'il n'y a pas 2 travailleurs? – Atma

+0

Le problème se produit-il uniquement lorsque vous essayez d'envoyer 2 de la même tâche? Essayez d'écrire une autre tâche factice et appelez-la de la même manière. BTW vous pouvez simplement utiliser 'task.delay()' plutôt que 'task.apply_async()' –

Répondre

0

Le problème était que je n'avais pas choisi de file d'attente pour associer la tâche.