taggit - Barra de progreso Django-Apio
invalid block tag on line 7 static did you forget to register or load this tag (4)
Yo suelo:
- Apio
- Django-Apio
- RabbitMQ
Puedo ver todas mis tareas en la página de administración de Django, pero en este momento solo tiene algunos estados, como:
- RECIBIDO
- PROCESAR DE NUEVO
- REVOCADO
- ÉXITO
- EMPEZADO
- FRACASO
- PENDIENTE
No es suficiente información para mí. ¿Es posible agregar más detalles sobre un proceso en ejecución a la página de administración? Como barra de progreso o contador de trabajos terminados, etc.
Sé cómo usar la función de registro de apio, pero una GUI es mejor en mi caso por algunas razones.
Entonces, ¿es posible enviar alguna información de rastreo a la página de administración de Django-Celery?
Aquí está mi backend de Django de informe de progreso mínimo usando tu configuración. Sigo siendo un Django n00b y es la primera vez que me meto con Celery, por lo que probablemente pueda optimizarse.
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"),
)
Estoy empezando a tratar de resolver esto por mí mismo. Comience por definir un estado de PROGRESO exactamente como se explica en la guía de usuario de Celery , luego todo lo que necesita es insertar un js en su plantilla que actualizará su barra de progreso.
Gracias a @Florian Sesser por tu ejemplo!
Hice una aplicación Django completa que muestra el progreso de crear 1000 objetos para los usuarios en http://iambusychangingtheworld.blogspot.com/2013/07/django-celery-display-progress-bar-of.html
¡Todos pueden descargarlo y usarlo!
Recomendaría una biblioteca llamada celery-progress para esto. Está diseñado para hacer que sea tan fácil como sea posible colocar una configuración básica de barra de progreso de extremo a extremo en una aplicación de django con el menor número de andamios posible, al mismo tiempo que admite una gran personalización en el front-end, si así lo desea. Un montón de documentos y referencias para comenzar en el README.
Revelación completa: soy el autor / mantenedor de dicha biblioteca.