single |
aiostream
=========
:alt:
:alt:
:alt:
:alt:
:alt:
Generator-based operators for asynchronous iteration
Synopsis
--------
aiostream_ provides a collection of stream operators that can be combined
to create
asynchronous pipelines of operations.
It can be seen as an asynchronous version of itertools_, although some
aspects are slightly different.
Essentially, all the provided operators return a unified interface called a
stream.
A stream is an enhanced asynchronous iterable providing the following
features:
- **Operator pipe-lining** - using pipe symbol ``|``
- **Repeatability** - every iteration creates a different iterator
- **Safe iteration context** - using async with and the stream method
- **Simplified execution** - get the last element from a stream using await
- **Slicing and indexing** - using square brackets ``[]``
- **Concatenation** - using addition symbol ``+``
Requirements
------------
The stream operators rely heavily on asynchronous generators (`PEP 525`_):
- python >= 3.6
Stream operators
----------------
The `stream operators`_ are separated in 7 categories:
+--------------------+---------------------------------------------------------------------------------------+
| **creation** | iterate_, preserve_, just_, call_, empty_, throw_,
never_, repeat_, count_, range_ |
+--------------------+---------------------------------------------------------------------------------------+
| **transformation** | map_, enumerate_, starmap_, cycle_, chunks_
|
+--------------------+---------------------------------------------------------------------------------------+
| **selection** | take_, takelast_, skip_, skiplast_, getitem_,
filter_, until_, takewhile_, dropwhile_ |
+--------------------+---------------------------------------------------------------------------------------+
| **combination** | map_, zip_, merge_, chain_, ziplatest_
|
+--------------------+---------------------------------------------------------------------------------------+
| **aggregation** | accumulate_, reduce_, list_
|
+--------------------+---------------------------------------------------------------------------------------+
| **advanced** | concat_, flatten_, switch_, concatmap_, flatmap_,
switchmap_ |
+--------------------+---------------------------------------------------------------------------------------+
| **timing** | spaceout_, timeout_, delay_
|
+--------------------+---------------------------------------------------------------------------------------+
| **miscellaneous** | action_, print_
|
+--------------------+---------------------------------------------------------------------------------------+
Demonstration
-------------
The following example demonstrates most of the streams capabilities:
.. sourcecode:: python
import asyncio
from aiostream import stream, pipe
async def main():
# Create a counting stream with a 0.2 seconds interval
xs = stream.count(interval=0.2)
# Operators can be piped using '|'
ys = xs | pipe.map(lambda x: x**2)
# Streams can be sliced
zs = ys[1:10:2]
# Use a stream context for proper resource management
async with zs.stream() as streamer:
# Asynchronous iteration
async for z in streamer:
|