【问题标题】:Celery update_state() not working芹菜更新状态()不工作
【发布时间】:2017-02-16 03:40:40
【问题描述】:

我正在制作进度条,但“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

当我在 ajax 中使用“process_percent”时,它总是“未定义”。
状态总是返回“PENDING”,但在 celery 控制台返回“结果”(“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)

【问题讨论】:

    标签: python ajax django celery


    【解决方案1】:

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

    worker_state_db = '/tmp/celery_state'
    

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2018-07-05
      • 1970-01-01
      • 2015-06-01
      • 2018-09-09
      相关资源
      最近更新 更多