定义 apache beam 管道的正确方法

den*_*dog 6 python google-cloud-dataflow apache-beam

我是 Beam 新手,正在努力寻找许多好的指南和资源来学习最佳实践。

我注意到的一件事是有两种定义管道的方法:

with beam.Pipeline() as p:
# pipeline code in here
Run Code Online (Sandbox Code Playgroud)

或者

p = beam.Pipeline()
# pipeline code in here
result = p.run()
result.wait_until_finish()
Run Code Online (Sandbox Code Playgroud)

是否存在首选每种方法的特定情况?

Con*_*tor 1

正如张一驰所指出的,Pipeline.__exit__设置.result,所以你可以这样做:

with beam.Pipeline() as p:
  ...

result = p.result
Run Code Online (Sandbox Code Playgroud)

contextmanager 版本更干净,因为当 contextmanager 内部出现错误时它可以正确清理。