Ответ 1
Я начинаю пытаться понять это сам. Начните с определения состояния PROGRESS точно так, как описано в Celery userguide, тогда вам нужно всего лишь вставить js в ваш шаблон, который обновит ваш прогресс бар.
Я использую:
Я могу видеть все свои задачи на странице администрирования Django, но на данный момент у нее всего несколько состояний, например:
Мне не хватает информации. Можно ли добавить дополнительную информацию о текущем процессе на страницу администратора? Как индикатор выполнения или счетчик готовых заданий и т.д.
Я знаю, как использовать функцию регистрации сельдерея, но по некоторым причинам графический интерфейс лучше в моем случае.
Итак, можно ли отправить некоторую информацию трассировки на страницу администрирования Django-Celery?
Я начинаю пытаться понять это сам. Начните с определения состояния PROGRESS точно так, как описано в Celery userguide, тогда вам нужно всего лишь вставить js в ваш шаблон, который обновит ваш прогресс бар.
Здесь мой минимальный промежуточный отчет о работе с 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"),
)
Спасибо @Florian Sesser за ваш пример!
Я сделал полное приложение Django, которое показывает прогресс создания 1000 объектов для пользователей в http://iambusychangingtheworld.blogspot.com/2013/07/django-celery-display-progress-bar-of.html
Каждый может скачать и использовать его!