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()
비동기 로그 남기기