我正在制作进度条但“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一起使用时,它总是'未定义'
并且状态始终返回“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)
答案 0 :(得分:1)
您可能需要statedb
:see docs for v3.1或docs for v4
worker_state_db = '/tmp/celery_state'
关于'amqp'后端,请参阅enter link description here:“不要在生产中使用”。
我建议有一个像 Redis 这样的后端,或者至少有一个数据库。