【问题标题】:Task results are saved only when all tasks are done仅当所有任务完成后才保存任务结果
【发布时间】:2020-04-14 20:51:40
【问题描述】:

我想监控/报告任务状态,但只有在所有任务完成后才会保存任务。我希望他们一开始就得救。

'''在我的队列项目中''' 芹菜.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Queue.settings')
app = Celery('Queue',
    broker='redis://localhost:6379',
    backend='django-db',
    task_track_started=True,
    include=['index.tasks'])
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

在“索引”应用程序中 任务.py

from __future__ import absolute_import, unicode_literals
from celery import shared_task, current_task
import time

@shared_task
def gozle():
   time.sleep(15)
   return 1

views.py

def index(request):
    gozle.delay()
    return HttpResponse('<a href="admin/">admin</a>')

我希望当我访问索引页面时我的任务会被触发并被记录到 ResultTask 中,但它会等待 15 秒然后被记录。

【问题讨论】:

    标签: python django redis celery django-celery


    【解决方案1】:

    应该立即确认任务的开始,您应该在 celery 服务器中看到一个日志条目,上面写着gozle 任务已启动,然后等待 15 秒并退出,此退出状态也将在 @ 987654323@ 服务器日志。如果不是这种情况,可能与celery 配置中启用的task_acks_late 有关,这里是doc,使其仅在任务结束后才确认任务。

    【讨论】:

    • 立即确认,但在任务完成之前不会保存在数据库中。所以我无法获得有关其状态的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多