i_tee(obj, n)
consumes and buffers the output of a single iterator
obj
so that it can be read by n
independent sub-iterators.
Arguments
- obj
an iterable object
- n
the number of iterators to return
- max
The maximum number of values to buffer.
- ...
passed along to
iteror(obj, ...)
Details
It works by saving the output of source obj
in a queue, while
each sub-iterator has a "read pointer" indexing into the
queue. Items are dropped from the queue after all sub-iterators
have seen them.
This means that if one sub-iterator falls far behind the others, or
equivalently if one sub-iterator reads far ahead its cohort the
others, the intervening values will be kept in memory. The max
argument gives a limit on how many items will be held. If this
limit is exceeded due to one sub-iterator reading far ahead of the
others, an error will be thrown when that sub-iterator attempts to
read a new value.