[Python-Dev] PEP 492: async/await in Python; version 5 (original) (raw)

Guido van Rossum guido at python.org
Tue May 5 22:55:33 CEST 2015


One small clarification:

On Tue, May 5, 2015 at 12:40 PM, Jim J. Jewett <jimjjewett at gmail.com> wrote:

[...] but I don't understand how this limitation works with things like a per-line file iterator that might need to wait for the file to be initially opened.

Note that PEP 492 makes it syntactically impossible to use a coroutine function to implement an iterator using yield; this is because the generator machinery is needed to implement the coroutine machinery. However, the PEP allows the creation of asynchronous iterators using classes that implement aiter and anext. Any blocking you need to do can happen in either of those. You just use async for to iterate over such an "asynchronous stream".

(There's an issue with actually implementing an asynchronous stream mapped to a disk file, because I/O multiplexing primitives like select() don't actually support waiting for disk files -- but this is an unrelated problem, and asynchronous streams are useful to handle I/O to/from network connections, subprocesses (pipes) or local RPC connections. Checkout the streams <https://docs.python.org/3/library/asyncio-stream.html> and subprocess <https://docs.python.org/3/library/asyncio-subprocess.html> submodules of the asyncio package. These streams would be great candidates for adding aiter/anext to support async for-loops, so the idiom for iterating over them can once again closely resemble the idiom for iterating over regular (synchronous) streams using for-loops.)

-- --Guido van Rossum (python.org/~guido) -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20150505/faff9118/attachment-0001.html>



More information about the Python-Dev mailing list