def multi_stream_iter(self, log_group, streams, positions=None):
positions = positions or {s: Position(timestamp=<NUM_LIT:0>, skip=<NUM_LIT:0>) for s in streams}<EOL>event_iters = [self.log_stream(log_group, s, positions[s].timestamp, positions[s].skip)<EOL>for s in streams]<EOL>events = []<EOL>for s in event_iters:<EOL><INDENT>if not s:<EOL><INDENT>events.append(None)<EOL>continue<EOL><DEDENT>try:<EOL><INDENT>events.append(next(s))<EOL><DEDENT>except StopIteration:<EOL><INDENT>events.append(None)<EOL><DEDENT><DEDENT>while any(events):<EOL><INDENT>i = argmin(events, lambda x: x['<STR_LIT>'] if x else <NUM_LIT>)<EOL>yield (i, events[i])<EOL>try:<EOL><INDENT>events[i] = next(event_iters[i])<EOL><DEDENT>except StopIteration:<EOL><INDENT>events[i] = None<EOL><DEDENT><DEDENT>
Iterate over the available events coming from a set of log streams in a single log group
interleaving the events from each stream so they're yielded in timestamp order.

:param log_group: The name of the log group.
:type log_group: str
:param streams: A list of the log stream names. The position of the stream in this list is
    the stream number.
:type streams: list
:param positions: A list of pairs of (timestamp, skip) which represents the last record
    read from each stream.
:type positions: list
:return: A tuple of (stream number, cloudwatch log event).