21

私が使う:

  1. セロリ
  2. Django-Celery
  3. RabbitMQ

Django管理ページですべてのタスクを確認できますが、現時点では次のようないくつかの状態があります。

  • 受け取った
  • リトライ
  • 取り消されました
  • 成功
  • 開始しました
  • 失敗
  • 保留中

それは私にとって十分な情報ではありません。実行中のプロセスに関する詳細を管理ページに追加することはできますか?プログレスバー完成したジョブカウンターなどのように。

セロリのログ機能の使い方は知っていますが、私の場合はGUIの方がいいと思います。

では、トレース情報をDjango-Celery管理ページに送信することは可能ですか?

4

4 に答える 4

31

これが私の最小限の進捗状況です-セットアップを使用してDjangoバックエンドを報告します。私はまだDjangon00bであり、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"),
)
于 2013-02-27T16:39:50.717 に答える
10

私はこれを自分で理解しようとしています。Celeryユーザーガイドで説明されているとおりにPROGRESS状態を定義することから始めます。次に、必要なのは、プログレスバーを更新するjsをテンプレートに挿入することだけです。

于 2011-10-21T07:58:41.840 に答える
6

あなたの例を@FlorianSesserに感謝します!

http://iambusychangingtheworld.blogspot.com/2013/07/django-celery-display-progress-bar-of.htmlで、ユーザーに1000個のオブジェクトの作成の進行状況を示す完全なDjangoアプリを作成しました。

どなたでもダウンロードしてご利用いただけます!

于 2013-07-05T14:09:37.967 に答える
6

このためにcelery-progressというライブラリをお勧めします。これは、基本的なエンドツーエンドのプログレスバーのセットアップを可能な限り少ないスキャフォールドでdjangoアプリにドロップインできるように設計されており、必要に応じてフロントエンドでの大幅なカスタマイズもサポートします。READMEを開始するためのドキュメントとリファレンスがたくさんあります。

完全な開示:私は当該図書館の著者/維持者です。

于 2018-06-26T16:21:46.973 に答える