2011-02-06 1 views
0

는 내가 작업 대기열에 쿼리 결과를 전달하기 위해 노력하고있어 :이 작동하지 않습니다google.appengine.api.taskqueue 페이로드 인수가 쿼리 결과가 될 수 있습니까?

q = models.Spam.all() 
results = q.fetch(10) 
taskqueue.add(url='/_ah/queue/do-spams', payload=results) 

. 인수 구조가 잘못되었거나 페이로드가 결과 집합이 될 수 없습니다.

+2

부수적으로 이것은 엔티티가 부피가 클 수 있으며 작업 대기열 페이로드에는 최대 10k가 있습니다. Deferred는 데이터 저장소에 더 큰 항목을 저장하므로 작업 대기열 처리기 내에서 레코드를 가져 오는 것 외에는 아무 것도 얻지 못합니다. 또한 작업이 실행될 때까지 레코드가 만료 될 수 있습니다. –

+0

@NickJohnson : 우리가 그런 유익한 지연 라이브러리를 가지고있을 때 왜 다른 사람이 taskqueue.add() 메소드를 사용해야하는지, 왜 왜 사용해야합니까? – rajpy

답변

1

작업 대기열에 직접 추가하는 대신 지연된 queue을 사용합니다. 지연된 대기열은 작업 대기열과 비슷한 기능을합니다. 지연 대기열의 주요 기능 중 하나는 모든 유형의 데이터를 내부 메소드 중 하나에 전달할 수 있다는 것입니다.

지연하려는 메소드, 매개 변수 값 및 지연된 대기열을 지정하면 appengine이 데이터로 올바르게 전달됩니다.

+0

흥미 롭군요. 완전히 빠졌습니다. "지연 라이브러리를 사용하면 전용 작업 처리기를 설정하고 간단한 함수 deferred.defer()를 노출하여 매개 변수를 직렬화 및 직렬화 해제하는 모든 작업을 생략 할 수 있습니다. –

+1

지연은 표준 작업 대기열을 사용하며 Nick은 다음에 대한 훌륭한 일반 래퍼를 제공했습니다. 이 응용 프로그램을 쉽게 만들 수 있습니다. 예를 들어 결과를 산란시키고 페이로드를 통해 작업에 전달하는 등의 작업을 통해 동일한 결과를 얻을 수 있습니다. –

0

taskqueue에 대한 문서를 읽었을 때 문자열이나 적어도 하나의 문자열 표현이있는 객체를 전달해야한다고 생각합니다.

HTTP 요청 본문으로 webhook에 전달되는이 작업의 페이로드 데이터입니다. 이진 데이터가 포함 된 문자열 일 수 있습니다.

http://code.google.com/appengine/docs/python/taskqueue/tasks.html#Task

는 왜 작동하지? 오류가 있습니까? 빠른 테스트를 위해 그것을 str(results)에 전달하려고 할 수 있습니다. 실제로 문자열을 기대하는 경우 결과를 일련 번호로 표시 할 수 있습니다 (예 : JSON.

관련 문제