2017-02-16 3 views
1

Ich mache Fortschrittsbalken, aber "current_task.update_state()" funktioniert nicht !! Dies ist das einfache Beispiel meiner "task.py" -Definition.Sellerie update_state() funktioniert nicht

from celery import shared_task, current_task 

@shared_task 
def mytask(a): 

    list_A = [1, 2, 3] 

    result = [] 
    for i in list_A: 
     m = a * i 
     result.append(m) 

     process_percent = int(100 * len(result)/len(list_A)) 
     current_task.update_state(state='PROGRESS', 
            meta={'process_percent':process_percent}) 
    return result 

Wenn ich 'process_percent' mit AJAX verwende, ist es immer 'undefiniert'.
Und Status immer zurück "PENDING", aber das Ergebnis an der Sellerie-Konsole ("Sellerie -A myapp worker --loglevel = info --pool = Solo") zurückgeben
So kann ich das Ergebnis der Aufgabe sehen.
Aber ich weiß nicht, warum 'process_percent' nicht aktualisiert wird ....
Ich denke "current_task.update_state" funktioniert nicht ... Und das ist meine Sellerie-Einstellung.

import os 
from celery import Celery 
from django.conf import settings 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings') 
app = Celery('myapp', broker='amqp://[email protected]:5672//', backend='amqp') 

app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

Antwort

0

Wahrscheinlich müssen Sie ein statedb: see docs for v3.1 oder docs for v4

worker_state_db = '/tmp/celery_state' 

Was die 'AMQP' Backend, bitte enter link description here sehen: "in der Produktion nicht Verwenden Sie".

Ich würde empfehlen, ein Backend wie Redis oder zumindest Datenbank dafür zu haben.

Verwandte Themen