Django-Celery 进度条

Posted

技术标签:

【中文标题】Django-Celery 进度条【英文标题】:Django-Celery progress bar 【发布时间】:2011-11-14 20:58:30 【问题描述】:

我用:

    芹菜 Django-芹菜 RabbitMQ

我可以在 Django 管理页面中看到我的所有任务,但目前它只有几个状态,例如:

收到 重试 已撤销 成功 开始 失败 待处理

这对我来说信息不足。是否可以将有关正在运行的进程的更多详细信息添加到管理页面?像进度条已完成的工作计数器等。

我知道如何使用 Celery 日志记录功能,但出于某些原因,我的 GUI 更好。

那么,是否可以将一些跟踪信息发送到 Django-Celery 管理页面?

【问题讨论】:

【参考方案1】:

这是我使用您的设置的最小进度报告 Django 后端。我还是个Django n00b,第一次玩Celery,所以这个大概可以优化一下。

from time import sleep

from celery import task, current_task
from celery.result import AsyncResult

from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.utils import simplejson as json
from django.conf.urls import patterns, url


@task()
def do_work():
    """ Get some rest, asynchronously, and update the state all the time """
    for i in range(100):
        sleep(0.1)
        current_task.update_state(state='PROGRESS',
            meta='current': i, 'total': 100)


def poll_state(request):
    """ A view to report the progress to the user """
    if 'job' in request.GET:
        job_id = request.GET['job']
    else:
        return HttpResponse('No job id given.')

    job = AsyncResult(job_id)
    data = job.result or job.state
    return HttpResponse(json.dumps(data), mimetype='application/json')


def init_work(request):
    """ A view to start a background job and redirect to the status page """
    job = do_work.delay()
    return HttpResponseRedirect(reverse('poll_state') + '?job=' + job.id)


urlpatterns = patterns('webapp.modules.asynctasks.progress_bar_demo',
    url(r'^init_work$', init_work),
    url(r'^poll_state$', poll_state, name="poll_state"),
)

【讨论】:

在较新的版本上,我认为习惯用法是先执行@task(bind=True),然后调用self.update_state。性能方面我不确定哪个更好。【参考方案2】:

我开始尝试自己解决这个问题。首先按照Celery userguide 中的说明定义 PROGRESS 状态,然后您只需在模板中插入一个 js 即可更新进度条。

【讨论】:

链接已过期 更新过时的链接【参考方案3】:

感谢@Florian Sesser 提供的示例!

我制作了一个完整的 Django 应用程序,向http://iambusychangingtheworld.blogspot.com/2013/07/django-celery-display-progress-bar-of.html的用户显示创建 1000 个对象的进度

每个人都可以下载使用!

【讨论】:

感谢您的博客,但代码不再可用。 这里是项目文件夹:dropbox.com/sh/o9p92yxhpdx58yh/AABBpO912y3NKgXXU4QeLHAFa?dl=0【参考方案4】:

我会为此推荐一个名为 celery-progress 的库。它旨在尽可能轻松地将基本的端到端进度条设置放入 django 应用程序中,并尽可能少地使用脚手架,同时如果需要还支持前端的大量定制。 README 中有大量文档和参考资料供您入门。

完全披露:我是该库的作者/维护者。

【讨论】:

您能提供一个工作示例吗?我被 celery-progress 困住了 @MuhammadUmarFarooq 随时提出 celery-progress 中的问题以及您面临的具体问题,我会尽快查看 先生,您可以提供一个github演示,而不是解决个别问题。这样,一个人就可以根据库版本签出所需的提交。谢谢 或者请仅提及您构建演示的版本,我不确定,但我认为 django/celery 最新版本会导致问题。 最新的演示在 Django 3.0.5 和 Celery 4.4.0 上运行,我相信这是截至目前最新的。 @MuhammadUmarFarooq

以上是关于Django-Celery 进度条的主要内容,如果未能解决你的问题,请参考以下文章

android 进度条样式 怎么改

长按如何使进度条变化Android

R语言 进度条

iOS 制作个圆形进度条

android 怎么自定义绘制如下图中这种进度条

uploadifive.js怎么去掉进度条