2012-04-04

AppEngine pipeline

개요

Datastore 에 task 순서를 저장하고 순차적으로 하나씩 실행한다.
task 1 의 리턴값이 task2 의 출력값이 된다.
내부적으로 task queue 를 사용한다.

  • run() 의 리턴값 또는 마지막 yield 값이 self.outputs.default.value 가 된다.
  • 여러 개의 값을 리턴할 수도 있다.
  • 값에 이름이 필요할 경우 output_names 와 fill() 함수를 이용할 것.
output = [ slot, ... ] 

2개를 순차 실행

task2 에서 task1 을 yield 로 호출할 것.

class Task1(pipeline.Pipeline):
  def run(self, input):
    return input*2

class Task2(pipeline.Pipeline):
  def run(self, input):
    result = yield Task1(input)
    return input+1

이때 x 는 Future 객체다. x 의 값을 읽어오려면 또다른 yield 로만 가능하다.

common 모듈

각종 다양한 파이프라인 기능을 지원한다.

callback(), get_callback_task(), get_callback_url()

어떤 태스크들은 사람이 중간에 개입해서 이메일의 링크를 클릭하거나, delay 처럼 일정 시간 후에 태스크큐를 통해서 비동기적으로 수행될 필요가 있다.

이때 콜백 함수가 호출된다.

finalize()

아직 결과값이 저장되지는 않은 상태다.

output_names & fill()

하나의 값이 아니라 여러 개의 값을 이름 기반으로 넘겨야 할 때

output_names = ['aa', 'bb']
…
self.fill(self.outputs.aa, 11)
self.fill(self.outputs.bb, 'bbbbb')

와 같은 방식으로 저장한다.

with pipeline.After()

futures 를 파라미터로 받아서 해당 태스크가 모두 끝난 경우 with 아래 문을 실행한다.

common.Append()

여러 개의 태스크를 실행한 후 하나의 리스트로 리턴한다.

raise pipeline.Retry, Abort

예외는 위와 같이 넘길 것

yield common.Log.info()

비동기 로그 남기기


comments powered by Disqus