芹菜 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)
可能您需要 statedb
:see 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 这样的后端,或者至少为此使用数据库。
我正在制作进度条,但 "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)
可能您需要 statedb
:see 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 这样的后端,或者至少为此使用数据库。