2014-06-19 2 views
0

을 내 장고 설정에서 다음 설치 한 차단셀러리 작업은 항상

'djcelery', 
'kombu.transport.django' 

내 프로젝트 구조입니다 (장고 1.5)이 내 celery.py 파일

proj 
|_proj 
    __init__.py 
    celery.py  
    |_apps 
    |_myapp1 
     |_models.py 
     |_tasks.py 

입니다 :

내가 대화 형 장고를 시작하면, 이제

@task() 
def retrieve(): 
    # Do my stuff 

: 주요 __init__.py에서 5,

from __future__ import absolute_import 
import os 
from celery import Celery 
from django.conf import settings 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings.dev') 
app = Celery('proj') 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, related_name='tasks') 

내가 가진 :

from __future__ import absolute_import 
from .celery import app as celery_app 

그리고 마지막으로 myapp1에/ tasks.py 나는 나의 작업을 정의 셸을 실행하고 작업을 시작합니다.

result = retrieve.delay() 

항상 을 호출하는 것으로 보이는데, 이는 호출을 차단합니다. 즉, 함수가 반환 될 때까지 프롬프트가 블 루킹됩니다. result 상태가 SUCCESS 인 경우 함수는 실제로 작업을 수행하지만 은 비동기가 아니어야합니다 (). 내가 뭘 놓치고 있니?

+1

ALWAYS_EAGER이 thishttp 원인 것처럼 보인다 – dm03514

+0

//celery.readthedocs.org/en/latest/configuration.html#celery-always-eager 당신은 셀러리 노동자를 실행? – pynovice

+0

@pynovice 예, 실행 중이지만 메시지가 도착하지 않습니다. 나는 셀러리 -A proj worker -l info''python manage.py 샐러리 작업자 --loglevel = info' 또는'python manage.py celeryd'로 결과를 변경하지 않습니다. – Leonardo

답변

0

그것은 CELERY_ALWAYS_EAGER 원인이 해당하는 경우이

이 모든 작업이 때까지 작업 수익률을 차단하여 로컬로 실행됩니다처럼 보인다. apply_async() 및 Task.delay()는 결과가 이미 평가 된 것을 제외하고 AsyncResult의 API 및 동작을 에뮬레이트하는 EagerResult 인스턴스를 반환합니다.

즉, 작업은 대기열로 보내지 않고 로컬로 실행됩니다.