一个tee操作应该接受一个输入并返回两个副本输出。
我注意到 bonobo-etl具有 Tee 节点,但不清楚它们的用途。
它们可以用来将运行图分叉到两个方向吗?或者它们是否旨在用于加载类型的持久操作,在不停止该特定节点中的数据流的情况下使用?
该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
希望有帮助。