2017-09-19 4 views
4

Est-ce que celery prend en charge le renvoi du nombre de tâches en attente avant l'ID de la tâche? Par exemple, sans celery worker démarré, je pousse task1, task2, task3, tous les trois sont en attente, maintenant, ce que je veux, si je donne task3, il me dit qu'il y a 2 tâches en attente avant 3.Céleri vérifier le nombre de tâches en attente avant taskid spécifié

J'utilise céleri céleri 4.1, rabbitmq 3.5.4 comme courtier, et redis 3.2.9 comme backend de résultat. Bien que je puisse obtenir la profondeur de la file d'attente de lapin par l'API de gestion (par exemple, get_queue_depth du paquet pyrabbit), la profondeur de la file d'attente est entière, pas le nombre en attente avant l'ID de la tâche spécifiée.

Et je sais que je pourrais maintenir une file d'attente de gestion des identifiants de tâches poussés par moi-même.

Mais je veux qu'il y ait un moyen facile par céleri ou rabbitmq lui-même.

Merci.

+0

Vous avez le même problème. – Wesley

Répondre

1

Je ne suis pas sûr si elle répond à votre question, mais il y a control client qui peut vous aider à inspecter reserved tâches, active tâches et ainsi de suite ..

i = app.control.inspect() 
i.reserved() 

#output: 
[{'worker1.example.com': 
    [{'name': 'tasks.sleeptask', 
     'id': '32666e9b-809c-41fa-8e93-5ae0c80afbbf', 
     'args': '(8,)', 
     'kwargs': '{}'}]}] 

pour plus d'informations: http://docs.celeryproject.org/en/latest/userguide/workers.html#dump-of-reserved-tasks

Vous pouvez également surveiller/inspecter à partir de la ligne de commande: http://docs.celeryproject.org/en/latest/userguide/monitoring.html#commands

+0

Bien que les tâches dans i.reserved() soient listées, la séquence ne correspond pas exactement à l'exécution de l'ordre. Donc, cela ne devrait pas fonctionner. – Wesley

+0

peut-être 'CELERYD_PREFETCH_MULTIPLIER = 1' aidera ici .. – ItayB

+0

@Wesley avez-vous essayé? – ItayB