Comment puis-je récupérer une liste de tâches dans une file d'attente qui n'ont pas encore été traitées?
Réponses
Trop de publicités?Vous devriez regarder ici: Guide de céleri - Inspecter les travailleurs
Fondamentalement ceci:
>>> from celery.task.control import inspect
# Inspect all nodes.
>>> i = inspect()
>>> i.scheduled()
or:
>>> i.active()
En fonction de ce que vous voulez
Pour récupérer des tâches depuis le backend, utilisez cette
from amqplib import client_0_8 as amqp
conn = amqp.Connection(host="localhost:5672 ", userid="guest",\
password="guest", virtual_host="/", insist=False)
chan = conn.channel()
name, jobs, consumers = chan.queue_declare(queue="queue_name", passive=True)
Je pense que la seule façon d'obtenir les tâches en attente est de garder une liste de tâches que vous avez commencé et laisser la tâche supprimer de la liste quand il est démarré.
Avec rabbitmqctl et list_queues vous pouvez obtenir un aperçu de la façon dont beaucoup de tâches sont en attente, mais pas les tâches lui-même: http://www.rabbitmq.com/man/rabbitmqctl.1.man.html
Si ce que vous voulez inclut la tâche en cours de traitement, mais ne sont pas encore finies, vous pouvez garder une liste des tâches et vérifier leurs états:
from tasks import add
result = add.delay(4, 4)
result.ready() # True if finished
Ou vous laissez le Céleri stocker les résultats avec CELERY_RESULT_BACKEND et vérifier les tâches ne sont pas là.