Apachebeam、GoogleDataflow中的“finish_bundle”方法执行多次。
创始人
2024-09-05 12:30:33
0

这个问题通常是由于worker或pipeline在运行时出现异常而导致的。针对这种情况,可以使用try except块来捕捉这些异常并确保“finish_bundle”仅被执行一次。

以下是示例代码:

class MyDoFn(beam.DoFn):
    def process(self, element):
        try:
            # do some processing here
            yield BeamRecord
        except:
            # handle exception here
        finally:
            # ensure that finish_bundle is only executed once
            with self._lock:
                if self._should_finish_bundle:
                    self._should_finish_bundle = False
                    yield beam.pvalue.TaggedOutput('finished', None)
                        
    def finish_bundle(self):
        with self._lock:
            self._should_finish_bundle = True

pipeline = beam.Pipeline(options=options)
(pipeline
    | "Read input" >> beam.io.ReadFromText(input_file)
    | "Process elements" >> beam.ParDo(MyDoFn()).with_outputs('finished))
result = pipeline.run()

在这个示例中,我们定义了一个名为“MyDoFn”的DoFn类,并使用属性“self._should_finish_bundle”来跟踪一个worker是否应该执行“finish_bundle”。如果出现异常,则将其处理并不执行“finish_bundle”。在任何情况下,如果_worker_存在于_finish_bundle中,则使用一个_lock_确保它只执行一次。由于_finish_bundle是耗时操作,因此在确保它只被执行一次的同时有助于保持Beam管道的高效性。

相关内容

热门资讯

线上(wepoke真的)原来是... 线上(wepoke真的)原来是真的有挂!其实真的有挂(2022已更新)(哔哩哔哩);亲,其实确实真的...
两教程(Wepoke程序)软件... 两教程(Wepoke程序)软件透明挂辅助工具(软件透明挂)透视辅助(2024已更新)(哔哩哔哩);致...
软件(wepoke透明)原来是... 软件(wepoke透明)原来是真的有挂!其实真的有挂(2020已更新)(哔哩哔哩)是一款可以让一直输...
一模拟器(德扑工具)外挂辅助工... 一模拟器(德扑工具)外挂辅助工具(透视)透视辅助(2025已更新)(哔哩哔哩);亲真的是有正版授权,...
系统(aapoker讲解)竟然... 系统(aapoker讲解)竟然真的有挂!其实真的有挂(2021已更新)(哔哩哔哩);aapoker讲...
6系统(aapoker下载)外... 6系统(aapoker下载)外挂辅助工具(辅助挂)透视辅助(2023已更新)(哔哩哔哩)aapoke...
智能(德扑之星刷数据)果真真的... 智能(德扑之星刷数据)果真真的有挂!原来真的有挂(2025已更新)(哔哩哔哩);《WPK辅助透视》‌...
1机器人(德州nzt软件)软件... 1机器人(德州nzt软件)软件透明挂辅助软件(透视)透视辅助(2022已更新)(哔哩哔哩);人气非常...
ai代打(德扑之星决策)确实是... ai代打(德扑之星决策)确实是真的有挂!原来真的有挂(2020已更新)(哔哩哔哩);科技详细教程小薇...
第8透明(wepoke数据)外... 第8透明(wepoke数据)外挂透明挂辅助神器(辅助挂)透视辅助(2023已更新)(哔哩哔哩);原来...