は、私が使用します。ジャンゴ・セロリプログレスバー
- セロリ
- ジャンゴ・セロリ
- RabbitMQの
- 受信済み のようなわずかな州があります。 REVOKED
- RETRY
- SUCCESS
- は、それが私のために十分な情報ではありません
PENDING
私はセロリのロギング機能を使用する方法を知っているが、GUIは、いくつかの理由から、私の場合は良いです。
したがって、トレース情報をDjango-Celeryの管理ページに送信できますか?
は、私が使用します。ジャンゴ・セロリプログレスバー
PENDING
私はセロリのロギング機能を使用する方法を知っているが、GUIは、いくつかの理由から、私の場合は良いです。
したがって、トレース情報をDjango-Celeryの管理ページに送信できますか?
私はこれを自分自身で理解しようとしています。 Celery userguideで説明した通りにPROGRESS状態を定義することから始めて、必要なのは、プログレスバーを更新するテンプレートにjsを挿入することだけです。
私の最小限の進捗状況を報告するDjangoバックエンドは、セットアップを使用しています。私はまだDjango n00bですが、これはセロリを使いこなすのは初めてですから、これはおそらく最適化されるでしょう。
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"),
)
あなたの例を挙げると@Florian Sesserに感謝します。
私は誰もがそれをダウンロードして使用することができますhttp://iambusychangingtheworld.blogspot.com/2013/07/django-celery-display-progress-bar-of.html
でユーザーに1000個のオブジェクトを作成の進行状況を表示する完全なDjangoのアプリを作りましたよ!
ブログに感謝しますが、コードはもう利用できません。 – Demonedge
プロジェクトフォルダは次のとおりです。https://www.dropbox.com/sh/o9p92yxhpdx58yh/AABBpO912y3NKgXXU4QeLHAFa?dl=0 –
新しいバージョンでは、 '@task(bind = True)'を実行してから 'self.update_state'を呼び出すことができます。パフォーマンス上の理由から、どちらが良いか分かりません。 – dashesy