내가 사용장고 - 셀러리 진행 표시 줄
- 셀러리
- 장고 - 셀러리
- RabbitMQ
다음과 같은 몇 가지 상태가 있습니다.
- 수신 됨 ,
- RETRY
- REVOKED
- 성공
- 그것은 나를 위해 충분한 정보가 아니다
을 보류
나는 셀러리 로깅 기능을 사용하는 방법을 알고 있지만, GUI는 몇 가지 이유에 대한 내 경우에는 더 좋다.
그래서 장고 셀러리 관리 페이지로 추적 정보를 보낼 수 있습니까?
내가 사용장고 - 셀러리 진행 표시 줄
다음과 같은 몇 가지 상태가 있습니다.
을 보류
나는 셀러리 로깅 기능을 사용하는 방법을 알고 있지만, GUI는 몇 가지 이유에 대한 내 경우에는 더 좋다.
그래서 장고 셀러리 관리 페이지로 추적 정보를 보낼 수 있습니까?
나는 이것을 직접 알아 내기 시작했습니다. Celery userguide에서 설명한대로 PROGRESS 상태를 정확하게 정의하면 시작 막대를 업데이트 할 템플릿에 js를 삽입하기 만하면됩니다.
최소한의 진전 상황을보고 장고 백엔드를 사용하여 설정합니다. 나는 아직도 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 개 객체를 생성의 진행률을 표시 완벽한 장고 응용 프로그램을 만들!
블로그에 감사하지만 더 이상 코드를 사용할 수 없습니다. – Demonedge
프로젝트 폴더는 다음과 같습니다. https://www.dropbox.com/sh/o9p92yxhpdx58yh/AABBpO912y3NKgXXU4QeLHAFa?dl=0 –
새로운 버전에서 나는 숙어가'@task (bind = True)'를하고 나서'self.update_state'를 호출 할 것이라고 생각합니다. 성능면에서 어느 것이 더 나은지 확실하지 않습니다. – dashesy