2011-09-11 3 views
14

내가 사용장고 - 셀러리 진행 표시 줄

  1. 셀러리
  2. 장고 - 셀러리
  3. RabbitMQ
내가하지만 순간에, 장고 관리자 페이지 내 모든 작업을 볼 수 있습니다

다음과 같은 몇 가지 상태가 있습니다.

  • 수신 됨
  • ,
  • RETRY
  • REVOKED
  • 성공
  • 그것은 나를 위해 충분한 정보가 아니다

을 보류

  • 실패
  • 을 시작했다. 실행중인 프로세스에 대한 세부 정보를 관리자 페이지에 추가 할 수 있습니까? 진행 막대처럼 또는 완성 된 작업이 카운터 등

    나는 셀러리 로깅 기능을 사용하는 방법을 알고 있지만, GUI는 몇 가지 이유에 대한 내 경우에는 더 좋다.

    그래서 장고 셀러리 관리 페이지로 추적 정보를 보낼 수 있습니까?

  • 답변

    8

    나는 이것을 직접 알아 내기 시작했습니다. Celery userguide에서 설명한대로 PROGRESS 상태를 정확하게 정의하면 시작 막대를 업데이트 할 템플릿에 js를 삽입하기 만하면됩니다.

    28

    최소한의 진전 상황을보고 장고 백엔드를 사용하여 설정합니다. 나는 아직도 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"), 
    ) 
    
    +2

    새로운 버전에서 나는 숙어가'@task (bind = True)'를하고 나서'self.update_state'를 호출 할 것이라고 생각합니다. 성능면에서 어느 것이 더 나은지 확실하지 않습니다. – dashesy

    5

    예를 들어 @Florian Sesser에 감사드립니다.

    나는 다운로드하여 사용할 수 있습니다 http://iambusychangingtheworld.blogspot.com/2013/07/django-celery-display-progress-bar-of.html

    모두에서 사용자 1000 개 객체를 생성의 진행률을 표시 완벽한 장고 응용 프로그램을 만들!

    +1

    블로그에 감사하지만 더 이상 코드를 사용할 수 없습니다. – Demonedge

    +0

    프로젝트 폴더는 다음과 같습니다. https://www.dropbox.com/sh/o9p92yxhpdx58yh/AABBpO912y3NKgXXU4QeLHAFa?dl=0 –