2017-07-08 1 views
0

J'utilise Django, Celery et Jobtastic pour essayer de configurer certaines tâches que je vais interroger sur ma webapp principale. J'utilise RabbitMQ comme courtier.Jobtastic/Celery/RabbitMQ - AsyncResult est toujours en attente

Le problème est que si les tâches apparaissent correctement après le démarrage Céleri, en essayant d'obtenir le statut comme indiqué ci-dessous:

def get_state(request, task_id): 
    if request.is_ajax(): 
     task = AsyncResult(task_id) 
     data = task.result or task.state 
     print(data) 
     json_data = json.dumps(data) 
     return JsonResponse(json_data) 

Je suis incapable d'obtenir un autre statut, mais continuées. Mon terminal montre que la tâche est terminée mais je reçois toujours le statut PENDING. J'ai essayé de changer le backend ci-dessous sous CELERY_RESULT_BACKEND à plusieurs backends, y compris DJCelery, AMQP, et RPC. Ils apparaissent tous correctement lors du lancement de Céleri, donc je sais qu'ils sont enregistrés. J'essaye aussi de démarrer Celery avec l'option --pools = solo, comme suggéré pour les plateformes Windows mais je n'ai pas eu de chance avec ça non plus. Ci-dessous est mon fichier celery.py où j'initialiser l'application céleri.

from __future__ import absolute_import 

import os 

from celery import Celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'arbitrage.settings') 

from django.conf import settings # noqa 

app = Celery('arbitrage') 

# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
app.config_from_object('django.conf:settings') 
app.conf.update(
    CELERY_RESULT_BACKEND='amqp', 
    BROKER_URL='amqp://' 
) 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

J'instancier Céleri avec la commande suivante:

celery -A arbitrage worker -l info --pool=solo 

Toute aide serait grandement appréciée, je suis sur Céleri 3.1.5 comme Jobtastic ne fonctionne pas avec la version Céleri> 4.0.

Répondre

0

Fini par être quelque chose de complètement indépendant. Le paramètre task_id n'était pas valide lors de sa transmission à AsyncResult, ce qui me donnait toujours un statut Pending puisque Pending signifiait que le statut n'était pas connu, même pour les fausses valeurs d'id.