Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/python-trio/async_generator
Making it easy to write async iterators in Python 3.5
https://github.com/python-trio/async_generator
backports generators polyfill python python-3-5
Last synced: 1 day ago
JSON representation
Making it easy to write async iterators in Python 3.5
- Host: GitHub
- URL: https://github.com/python-trio/async_generator
- Owner: python-trio
- License: other
- Created: 2016-05-31T18:14:56.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-08-24T19:49:32.000Z (about 4 years ago)
- Last Synced: 2024-04-14T09:04:51.013Z (6 months ago)
- Topics: backports, generators, polyfill, python, python-3-5
- Language: Python
- Homepage:
- Size: 150 KB
- Stars: 94
- Watchers: 11
- Forks: 24
- Open Issues: 9
-
Metadata Files:
- Readme: README.rst
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
.. image:: https://img.shields.io/badge/chat-join%20now-blue.svg
:target: https://gitter.im/python-trio/general
:alt: Join chatroom.. image:: https://img.shields.io/badge/docs-read%20now-blue.svg
:target: https://async-generator.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status.. image:: https://travis-ci.org/python-trio/async_generator.svg?branch=master
:target: https://travis-ci.org/python-trio/async_generator
:alt: Automated test status.. image:: https://ci.appveyor.com/api/projects/status/af4eyed8o8tc3t0r/branch/master?svg=true
:target: https://ci.appveyor.com/project/python-trio/trio/history
:alt: Automated test status (Windows).. image:: https://codecov.io/gh/python-trio/async_generator/branch/master/graph/badge.svg
:target: https://codecov.io/gh/python-trio/async_generator
:alt: Test coverageThe async_generator library
===========================Python 3.6 added `async generators
`__. (What's an async
generator? `Check out my 5-minute lightning talk demo from PyCon 2016
`__.) Python 3.7 adds some more
tools to make them usable, like ``contextlib.asynccontextmanager``.This library gives you all that back to Python 3.5.
For example, this code only works in Python 3.6+:
.. code-block:: python3
async def load_json_lines(stream_reader):
async for line in stream_reader:
yield json.loads(line)But this code does the same thing, and works on Python 3.5+:
.. code-block:: python3
from async_generator import async_generator, yield_
@async_generator
async def load_json_lines(stream_reader):
async for line in stream_reader:
await yield_(json.loads(line))Or in Python 3.7, you can write:
.. code-block:: python3
from contextlib import asynccontextmanager
@asynccontextmanager
async def background_server():
async with trio.open_nursery() as nursery:
value = await nursery.start(my_server)
try:
yield value
finally:
# Kill the server when the scope exits
nursery.cancel_scope.cancel()This is the same, but back to 3.5:
.. code-block:: python3
from async_generator import async_generator, yield_, asynccontextmanager
@asynccontextmanager
@async_generator
async def background_server():
async with trio.open_nursery() as nursery:
value = await nursery.start(my_server)
try:
await yield_(value)
finally:
# Kill the server when the scope exits
nursery.cancel_scope.cancel()(And if you're on 3.6, you can use ``@asynccontextmanager`` with
native generators.)Let's do this
=============* Install: ``python3 -m pip install -U async_generator`` (or on Windows,
maybe ``py -3 -m pip install -U async_generator``* Manual: https://async-generator.readthedocs.io/
* Bug tracker and source code: https://github.com/python-trio/async_generator
* Real-time chat: https://gitter.im/python-trio/general
* License: MIT or Apache 2, your choice
* Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html
* Code of conduct: Contributors are requested to follow our `code of
conduct
`__ in
all project spaces.How come some of those links talk about "trio"?
===============================================`Trio `__ is a new async concurrency
library for Python that's obsessed with usability and correctness – we
want to make it *easy* to get things *right*. The ``async_generator``
library is maintained by the Trio project as part of that mission, and
because Trio uses ``async_generator`` internally.You can use ``async_generator`` with any async library. It works great
with ``asyncio``, or Twisted, or whatever you like. (But we think Trio
is pretty sweet.)