2017-02-16 10 views
1

Я делаю индикатор выполнения, но "current_task.update_state()" не работает !! Это простой пример моего определения «task.py».Celery update_state() не работает

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 

Когда я использую «process_percent» с ajax, он всегда «неопределен».
И статус всегда возвращает «ОЖИДАНИЕ», но возвращает «результат» на консоли сельдерея («celery -A myapp worker --loglevel = info -pool = solo»)
Итак, я вижу результат задачи.
Но, я не знаю, почему «process_percent» не обновляется ....
Я думаю, что «current_task.update_state» не работает ... И это мой настрой сельдерея.

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) 

ответ

0

Возможно вам нужно statedb: see docs for v3.1 или docs for v4

worker_state_db = '/tmp/celery_state' 

Что касается '' AMQP бэкэндом, пожалуйста, см enter link description here: "Не использовать в производстве".

Я бы рекомендовал иметь бэкэнд как Redis или, по крайней мере, для базы данных.

 Смежные вопросы

  • Нет связанных вопросов^_^