2014-06-10 6 views
1

J'ajoute un backend pour les résultats de céleri, et j'ai un problème pour envoyer des tâches, et certaines sont acceptées alors que d'autres ne le sont pas.Céleri n'accepte pas les tâches

Les tâches qui sont et ne sont pas exécutées à la fois montrent que cette sortie du journal:

[2014-06-09 15:50:59,091: INFO/MainProcess] Received task: tasks.multithread_device_listing[e3ae6d12-ad4b-4114-9383-5802c91541f2] 

ceux qui sont exécutés puis montrer cette sortie:

[2014-06-09 15:50:59,093: DEBUG/MainProcess] Task accepted: tasks.multithread_device_listing[e3ae6d12-ad4b-4114-9383-5802c91541f2] pid:2810 

Bien que les tâches qui ne sont pas exécutés jamais arriver à la ligne ci-dessus.

Comment j'envoyer des tâches:

from celery import group 
from time import sleep 


signatures = [] 
signature = some_method_with_task_decorator.subtask() 
signatures.append(signature) 
signature = some_other_method_with_task_decorator.subtask() 
signatures.append(signature) 
job = group(signatures) 
result = job.apply_async() 
while not result.ready(): 
    sleep(60) 

Ma config de céleri de l'avoir rapport, il est:

software -> celery:3.1.11 (Cipater) kombu:3.0.18 py:2.7.5 
       billiard:3.3.0.17 py-amqp:1.4.5 
    platform -> system:Darwin arch:64bit imp:CPython 
    loader -> celery.loaders.app.AppLoader 
    settings -> transport:amqp results:amqp://username:[email protected]:5672/automated_reports 

    CELERY_QUEUES: 
     (<unbound Queue automated_reports -> <unbound Exchange default(direct)> -> automated_reports>,) 
    CELERY_DEFAULT_ROUTING_KEY: '********' 
    CELERY_INCLUDE: 
     ('celery.app.builtins', 
    'automated_reports.queue.tasks', 
    'automated_reports.queue.subtasks') 
    CELERY_IMPORTS: 
     ('automated_reports.queue.tasks', 'automated_reports.queue.subtasks') 
    CELERY_RESULT_PERSISTENT: True 
    CELERY_ROUTES: { 
     'automated_reports.queue.tasks.run_device_info_report': { 'queue': 'automated_reports'}, 
     'uploader.queue.subtasks.multithread_device_listing': { 'queue': 'automated_reports'}, 
     'uploader.queue.subtasks.multithread_individual_device': { 'queue': 'automated_reports'}, 
     'uploader.queue.tasks.multithread_device_listing': { 'queue': 'automated_reports'}, 
     'uploader.queue.tasks.multithread_individual_device': { 'queue': 'automated_reports'}} 
    CELERY_DEFAULT_QUEUE: 'automated_reports' 
    BROKER_URL: 'amqp://username:********@localhost:5672/automated_reports' 
    CELERY_RESULT_BACKEND: 'amqp://username:[email protected]:5672/automated_reports' 

Ma commande de démarrage est:

~/Documents/Development/automated_reports/bin/celery worker --loglevel=DEBUG --autoreload -A automated_reports.queue.tasks -Q automated_reports -B --schedule=~/Documents/Development/automated_reports/log/celerybeat --autoscale=10,3 

Aussi, quand je me arrête céleri, il tire des tâches de ma file d'attente qui n'ont jamais été acceptées. Puis, quand je redémarre, il les accepte et les exécute.

Toute aide concernant ce comportement est très appréciée. Je suis certain que cela a quelque chose à voir avec ma configuration de backend, mais j'ai de la difficulté à isoler le problème ou sa correction. Merci!

Répondre

1

J'ai trouvé la réponse à cette question.

J'ai remarqué que la 'demande' semblait recevoir correctement des tâches dans certains cas, mais pas dans d'autres. Lorsque j'ai recherché les documents Celery, j'ai trouvé cette note: http://celery.readthedocs.org/en/latest/whatsnew-3.1.html?highlight=inqueue#caveats

J'exécutais les sous-tâches à partir d'une tâche de longue durée, cela ressemblait beaucoup au comportement que je voyais. Aussi, je suis sur la version mentionnée, alors que sur les versions précédentes je n'avais pas eu ce problème avec la même config.

J'ai ajouté le paramètre -Ofair au démarrage du worker et il a immédiatement résolu le problème.

Questions connexes