2017-02-16 2 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 

ajaxで 'process_percent'を使用すると、常に '未定義'になります。
ステータスは常に「PENDING」を返しますが、セロリコンソール(「セロリ-A myappワーカー--loglevel = info -pool = solo」)で 'result'を返します。
これでタスク結果が表示されます。
しかし、私は '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 'AMQP' バックエンド用として

worker_state_db = '/tmp/celery_state' 

enter link description hereを参照してください: "本番では使用しないでください"。

私はRedisまたはこれ以上のデータベースのようなバックエンドを持つことをお勧めします。

関連する問題