0

一个tee操作应该接受一个输入并返回两个副本输出。

我注意到 bonobo-etl具有 Tee 节点,但不清楚它们的用途。

它们可以用来将运行图分叉到两个方向吗?或者它们是否旨在用于加载类型的持久操作,在不停止该特定节点中的数据流的情况下使用?

4

1 回答 1

0

bonobo.Tee(f: Callable)操作只是应用一个函数并将未修改的流输入传递到流输出中。

尽管名称显然来自 unix 工具tee(正如您所指出的),但它与 bonobo 版本并不完全相似,一个输出是流输出,一个输出只是您使用的可调用对象。这个可调用对象可能会也可能不会将数据发送到流中(并且现在将数据发送到流中是不合时宜的)。

举个例子,如果你使用Tee(print),那么就会有流同时传递给 output 和print.

作为另一个更现实的示例,您应该能够执行以下操作:

import bonobo
import queue

output_queue = queue.Queue()


def get_graph():
    graph = bonobo.Graph()
    graph >> range(100) >> bonobo.Tee(output_queue.put) >> print
    return graph


if __name__ == "__main__":
    with bonobo.parse_args() as options:
        bonobo.run(get_graph())

    while True:
        try:
            print("out:", output_queue.get_nowait())
        except queue.Empty:
            break

希望有帮助。

于 2019-06-06T11:26:07.010 回答