芹菜 update_state() 不工作

Celery update_state() not working

我正在制作进度条,但 "current_task.update_state()" 不工作!! 这是我的 "task.py" 定义的简单示例。

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 一起使用时,它总是 'undefined'。
并且状态总是 return "PENDING",但 return 在 celery 控制台的 'result' ("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://guest@127.0.0.1:5672//', backend='amqp')

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

可能您需要 statedbsee docs for v3.1 or docs for v4

worker_state_db = '/tmp/celery_state'

至于'amqp'后端,请参阅enter link description here:"Do not use in production"。

我建议使用 Redis 这样的后端,或者至少为此使用数据库。