2012-01-16 3 views
10

상태와 장고 - 셀러리 : 셀러리 로그에서작업 내가 장고 - 셀러리를 사용하고이 같은 작업이

python manage.py shell 

r = tasks.TestTask().delay() 

내가 볼 해당 작업은 다음과 같습니다

class TestTask(Task): 
    name = "enabler.test_task" 

    def run(self, **kw): 
     debug_log("begin test task") 
     time.sleep(5) 
     debug_log("end test task") 

    def on_success(self, retval, task_id, args, kwargs): 
     debug_log("on success") 

    def on_failure(self, retval, task_id, args, kwargs): 
     debug_log("on failure") 

내가 작업을 실행할 장고 쉘을 사용을 실행 : 그러나

[2012-01-16 08:13:29,362: INFO/MainProcess] Got task from broker: enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c] 
[2012-01-16 08:13:29,390: DEBUG/PoolWorker-3] begin test task 
[2012-01-16 08:13:34,389: DEBUG/PoolWorker-3] end test task 
[2012-01-16 08:13:34,390: DEBUG/PoolWorker-3] on success 
[2012-01-16 08:13:34,390: INFO/MainProcess] Task enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c] succeeded in 5.00004410744s: None 

을 나는 지옥에서 작업 상태를 확인할 때 항상 가지고 PENDING :

,
>>> r = tasks.TestTask().delay() 
>>> r 
<AsyncResult: e2360811-d003-45bc-bbf8-c6fd5692c32c> 
>>> r.state 
'PENDING' 
>>> r.state 
'PENDING' 
>>> r.state 
'PENDING' 
>>> r.state 
'PENDING' 

작업이 제대로 실행 되더라도.

왜 이런 일이 발생합니까?

답변

10

어떤 셀러리 버전을 사용하고 있습니까? 나는이 파티에 정말로 늦었다 고 느낀다. 그러나 이것이 미래에 누군가를 돕는 경우에 대비한다. 작업이 ignore_result (기본적으로 최신 버전 임)로 설정된 경우 PENDING 상태를 유지하고 SUCCESS로 이동하지 않습니다.

여기에 자신의 문서,

@celery.task(ignore_result=True) 
def mytask(...) 
    something() 

당신은 당신이 다른 질문이 있으면 알려 주시기, 스스로 here을 볼 수 있습니다. 당신은 당신은 항상 수동과 같이 상태를 업데이트 할 수 있습니다 true로 설정 ignore_result 한 경우에도 또한

** 다른 노트, 진행률 표시 줄에 그 성격의

from celery import current_task 
current_task.update_state(state='PROGRESS', meta={'description': 'Doing some task', 'current': 59, 'tota': 73}) 

뭔가 - 또한 셀러리의 문서 페이지에서 볼 .

+0

고맙습니다. –

관련 문제