【问题标题】:How to abort App Engine pipelines gracefully?如何优雅地中止 App Engine 管道?
【发布时间】: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 中,我在开始PipelineAMapreducePipelinePipelineB 之前测试了一些条件。如果条件失败,我想中止EntryPipeline 和所有后续管道。

问题

  1. 什么是优雅的管道中止? self.abort() 是正确的方法还是我需要sys.exit()

  2. 如果我想在PipelineA 内进行流产怎么办?例如PipelineA 成功启动,但阻止后续管道(MapreducePipelinePipelineB)启动。


编辑:

我最终将条件语句移到了EntryPipeline 之外,所以只有在条件为真时才开始整个事情。否则我认为尼克的回答是正确的。

【问题讨论】:

    标签: python google-app-engine mapreduce appengine-pipeline


    【解决方案1】:

    由于文档目前说“TODO:谈论显式中止和重试

    我们必须阅读源代码:

    https://github.com/GoogleCloudPlatform/appengine-pipelines/blob/master/python/src/pipeline/pipeline.py#L703

      def abort(self, abort_message=''):
        """Mark the entire pipeline up to the root as aborted.
        Note this should only be called from *outside* the context of a running
        pipeline. Synchronous and generator pipelines should raise the 'Abort'
        exception to cause this behavior during execution.
    
        Args:
          abort_message: Optional message explaining why the abort happened.
    
        Returns:
          True if the abort signal was sent successfully; False if the pipeline
          could not be aborted for any reason.
        """
    

    所以如果你有一个 some_pipeline 句柄 不是 self,你可以调用 some_pipeline.abort()...但是如果您想中止自己,则需要 raise Abort() ...这会冒泡到顶部并杀死整棵树

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2021-12-28
      • 2017-01-20
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多