2014-07-10 4 views
2

예약 된 작업을 검사하는 데 주로 의존하는 RabbitMQ 백엔드로 셀러리 프로젝트를 얻었습니다. 나는 다음과 같은 코드가 (이 예약 된 작업 과정의) 대부분의 시간을 위해 아무 것도 반환하지 않습니다 발견 :셀러리가 불안정한 동작을 검사합니다.

i = app.control.inspect() 
scheduled = i.scheduled() 
if (scheduled): 
    # do something 

이 코드는 또한 작업 중 하나에서 실행하지만, 내가 가진 그것은 중요하지 않습니다 생각 대화식 파이썬 명령 행과 동일한 결과 (일부 예외가 있음, 아래 참조).

동시에 celery -A <proj> inspect scheduled 명령이 실패하지 않습니다. 또한 대화 형 파이썬 명령 줄에서 처음 호출 될 때이 명령도 결코 실패하지 않는다는 것을 알았습니다. 연속적인 대부분의 i.scheduled() 호출은 아무 것도 반환하지 않습니다.

i.scheduled() 처음으로 전화 할 때만 결과가 보장됩니까?

그렇다면 왜 그리고 어떻게 그리고 왜 예약 된 작업을 작업에서 검사 할 수 있습니까? 전담 작업자를 실행하고 모든 작업 후에 다시 시작 하시겠습니까? 그런 사소한 일 때문에 잔인한 것처럼 보입니다.

이 기능을 올바르게 사용하는 방법을 설명하십시오.

+0

가능한 중복 [셀러리 예정 목록 없음을 반환하지 않습니다 (http://stackoverflow.com/questions/24236131/celery-scheduled-list-returns : 여기

당신을 도울 수있는 작은 조각이다 - 없음) – daniula

답변

1

셀러리 앱 내부의 이상한 문제가 원인입니다. Inspect 개체에서 메서드를 반복하려면 새 셀러리 응용 프로그램 인스턴스 개체를 만들어야합니다.

from celery import Celery 

def inspect(method): 
    app = Celery('app', broker='amqp://') 
    return getattr(app.control.inspect(), method)() 

print inspect('scheduled') 
print inspect('active') 
+0

당신의 발췌 문장처럼 보인다 :) 고맙습니다. 그리고 예, 이것은 중복입니다, 나는 '셀러리가 아무것도 돌려주지 않습니다.'라고 봤는데 그걸 발견하지 못했습니다. –

관련 문제