【发布时间】:2015-04-30 22:44:16
【问题描述】:
问题
我有一个管道链:
class PipelineA(base_handler.PipelineBase):
def run(self, *args):
# do something
class PipelineB(base_handler.PipelineBase):
def run(self, *args):
# do something
class EntryPipeline(base_handler.PipelineBase):
def run(self):
if some_condition():
self.abort("Condition failed. Pipeline aborted!")
yield PipelineA()
mr_output = yield mapreduce_pipeline.MapreducePipeline(
# mapreduce configs here
# ...
)
yield PipelineB(mr_output)
p = EntryPipeline()
p.start()
在EntryPipeline 中,我在开始PipelineA、MapreducePipeline 和PipelineB 之前测试了一些条件。如果条件失败,我想中止EntryPipeline 和所有后续管道。
问题
什么是优雅的管道中止?
self.abort()是正确的方法还是我需要sys.exit()?如果我想在
PipelineA内进行流产怎么办?例如PipelineA成功启动,但阻止后续管道(MapreducePipeline和PipelineB)启动。
编辑:
我最终将条件语句移到了EntryPipeline 之外,所以只有在条件为真时才开始整个事情。否则我认为尼克的回答是正确的。
【问题讨论】:
标签: python google-app-engine mapreduce appengine-pipeline