2015-01-02 1 views
2

셀로리와 파이썬으로 시작해서 끝까지 실행되는 온라인 파일 하나를 찾을 수없는 것 같아서 그것을 보여주기 위해 노력했습니다. 웬일인지 이것이 효과가 없기 때문에 셀러리를 처음 접했습니다. 내가 로컬 호스트와 입력 콘솔에서 레디 스 서버를 실행 한 다음Canonical Celery single file hello world

from celery import Celery 
import time 

app = Celery(
    'test_celery' 
    ,broker= 'redis://localhost/0', 
    backend='redis://localhost/1' 
) 

@app.task 
def add(x, y): 
    time.sleep(2) 
    return x + y 

if __name__ == '__main__': 
    result = add.delay(4, 4) 
    print(result.get()) 

: test_celery.py에서 나는 아래의 내용을 추가 그래서

celery -A test_celery worker --loglevel=info 

, 이제 노동자가 수신 내가 python test_celery.py 생각을 실행하려고 콘솔 출력에서 ​​멋진 8을보아야합니다. 작업자 콘솔의 로그에서 예상대로 작동하지만 result.get에 대한 호출이 주 프로그램 콘솔에서 중지되는 [2015-01-02 16:53:08,807: INFO/MainProcess] Task test_celery.add[2c6b19c0-3a3f-45d2-8024-64e112fa3419] succeeded in 1.9970000002067536s: 8이 표시됩니다.

누군가가 위대한 사람이 될 수 있다면 나는 여기에 기본적인 것을 놓치고 있어야합니다.

+0

내 컴퓨터에 rabbitmq 만 있기 때문에 코드가 나에게 기대되는대로 작동합니다 ('8' 인쇄),'backend ='amqp ', broker ='amqp : // ''만 사용했습니다. 그래서 당신 redis 설정에 문제가 있다고 의심됩니다. 나는 redis에 많은 exeprience가 없지만, 나는 분리 된 데이터베이스를 사용하는 것이 낙담했다는 것을 상기합니다. – kalhartt

+1

흥미롭게도 우분투 가상 박스에서이 코드를 테스트했는데 redis와 amqp와 함께 작동합니다. 그것은 또한 다른 redis 데이터베이스 또는 동일을 사용하여 날씨를 작동합니다. 이것은 플랫폼 문제 일 것입니다. 저는 원래 Windows 7에서 테스트를 진행 했었습니다. 회사의 기발한 네트워킹/DNS 습관과 관련 될 수도 있습니다. – user25064

답변

1

해결 방법은 Celery 개체의 생성자 대신 app.conf.update 호출을 사용하여 결과 백엔드를 설정하는 것입니다.

셀러리 GitHub 페이지의 this postthis thread 인이 문제의 해결책을 발견했습니다. 그것은 (지금은) 개방 문제

솔루션 예상대로

from celery import Celery 
import time 

app = Celery(
    'test_celery' 
    ,broker= 'redis://localhost/0' 
) 

app.conf.update(
    CELERY_RESULT_BACKEND = 'redis://localhost/1' 
) 

@app.task 
def add(x, y): 
    time.sleep(2) 
    return x + y 

if __name__ == '__main__': 
    result = add.delay(4, 4) 
    print(result.get()) 

작품 남아있다.