2013-05-11 2 views
2

내 Django 프로젝트에서 나는 Celery (docs), Django-CeleryRabbitMQ을 브로커로 사용하여 일부 비동기 작업을 실행하고 있습니다. 일반적으로 작동하는 반면, 설치에는 두 가지 문제가 있습니다.Django Celery - n 초 - 카운트 다운 플래그 지연 작업을 시작하는 방법이 무시됩니다.

a) 작업 실행이 요청 스레드와 결합 된 것 같습니다.

from celery.task import Task 
from celery.registry import tasks 

#in project_management.tasks.py 
class TestTask(Task): 
    def run(self, x, y): 
     print "running TestTask" 
     return x + y 

tasks.register(TestTask) 

: 따라서 사용자의 HTTP 요청 작업이

B를 실행 때까지 작업 실행 카운트 다운 플래그 테스트 목적으로

내가 가지고 설치를 간단한 TestTask을 무시하는 것) 기다려야 할 것 같다 따라서 10으로 설정 카운트 다운 플래그가 완전히 무시됩니다

python manage.py shell 
from project_management.tasks import TestTask 
result = TestTask.apply_async(args=[5, 5], kwargs={}, countdown=10)#immediately outputs "running TestTask" 
result.result -> immediately returns 10 
result.ready() -> immediately returns True 

: 콘솔 내에서이 작업을 실행하면 나에게 다음과 같은 결과를 제공합니다. 어떤 설정이 잘못 되었습니까?

나는 다음 명령을 사용하여 셀러리와 RabbitMQ를 시작 해요 :

RABBITMQ_NODE_PORT=5672 rabbitmq-server 
python manage.py celeryd --loglevel=info 

업데이트 :

나는이 문제가 시간대 설정으로 어떻게 든 관련 생각합니다. 자세한 내용은 thread을 참조하십시오. 어쨌든 그것을 우회하는 방법을 모릅니다.

>>> from project_management.tasks import add 
>>> from datetime import timedelta, datetime 
>>> eta = datetime.now() + timedelta(seconds=60) 
>>> result = add.apply_async(args=[5, 5], kwargs={}, eta=eta) 
>>> result.ready() 
True 
>>> eta = datetime.utcnow() + timedelta(seconds=60) 
>>> result = add.apply_async(args=[5, 5], kwargs={}, eta=eta) 
>>> result.ready() 
True 
+0

'result.get()'을 사용하여 값을 얻으려고 했습니까? 값을 즉시 반환합니까? –

+0

예, 즉시. 한 번 더 확인했습니다. –

답변

9

나중에 참조 : 난 항상 결과가 즉시 사용할 수 있는지 같은 결과를 가지고,이 테스트를 실행. CELERY_ALWAYS_EAGER 설정을 True로 설정했기 때문에 작업이 즉시 실행되었습니다. 이는 작업이 synchronously으로 실행된다는 의미입니다. 이 변수를 False로 설정하면 문제가 해결됩니다.

희망이 있으면 누군가에게 도움이됩니다.