# HG changeset patch # Parent 44253ce374fc21402c15cbce9c2be0e184610882 diff --git a/Doc/glossary.rst b/Doc/glossary.rst --- a/Doc/glossary.rst +++ b/Doc/glossary.rst @@ -169,18 +169,19 @@ statement by defining :meth:`__enter__` and :meth:`__exit__` methods. See :pep:`343`. - coroutine function - A function which returns a :term:`coroutine` object. It is defined - with an :keyword:`async def` keyword, and may contain :keyword:`await`, - :keyword:`async for`, and :keyword:`async with` keywords. Introduced - by :pep:`492`. - coroutine Coroutines is a more generalized form of subroutines. Subroutines are - entered at one point and exited at another point. Coroutines, can be - entered, exited, and resumed at many different points. See - :keyword:`await` expressions, and :keyword:`async for` and - :keyword:`async with` statements. See also :pep:`492`. + entered at one point and exited at another point. Coroutines can be + entered, exited, and resumed at many different points. They can be + implemented with the :keyword:`async def` statement. See also + :pep:`492`. + + coroutine function + A function which returns a :term:`coroutine` object. A coroutine + function may be defined with the :keyword:`async def` statement, + and may contain :keyword:`await`, :keyword:`async for`, and + :keyword:`async with` keywords. These were introduced + by :pep:`492`. CPython The canonical implementation of the Python programming language, as diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -8,17 +8,23 @@ Coroutines ---------- -A coroutine is a generator that follows certain conventions. For -documentation purposes, all coroutines should be decorated with -``@asyncio.coroutine``, but this cannot be strictly enforced. +Coroutines used with :mod:`asyncio` may be implemented using the +:keyword:`async def` statement, or by using :term:`generators `. +The :keyword:`async def` type of coroutine was added in Python 3.5, and +is recommended if there is no need to support older Python versions. -Coroutines use the ``yield from`` syntax introduced in :pep:`380`, +Generator-based coroutines should be decorated with :func:`@asyncio.coroutine +`, although this is not strictly enforced. +The decorator enables compatibility with :keyword:`async def` coroutines, +and also serves as documentation. Generator-based +coroutines use the ``yield from`` syntax introduced in :pep:`380`, instead of the original ``yield`` syntax. The word "coroutine", like the word "generator", is used for two different (though related) concepts: -- The function that defines a coroutine (a function definition +- The function that defines a coroutine + (a function definition using :keyword:`async def` or decorated with ``@asyncio.coroutine``). If disambiguation is needed we will call this a *coroutine function* (:func:`iscoroutinefunction` returns ``True``). @@ -30,27 +36,28 @@ Things a coroutine can do: -- ``result = yield from future`` -- suspends the coroutine until the +- ``result = await future`` or ``result = yield from future`` -- + suspends the coroutine until the future is done, then returns the future's result, or raises an exception, which will be propagated. (If the future is cancelled, it will raise a ``CancelledError`` exception.) Note that tasks are futures, and everything said about futures also applies to tasks. -- ``result = yield from coroutine`` -- wait for another coroutine to +- ``result = await coroutine`` or ``result = yield from coroutine`` -- + wait for another coroutine to produce a result (or raise an exception, which will be propagated). The ``coroutine`` expression must be a *call* to another coroutine. - ``return expression`` -- produce a result to the coroutine that is - waiting for this one using ``yield from``. + waiting for this one using :keyword:`await` or ``yield from``. - ``raise exception`` -- raise an exception in the coroutine that is - waiting for this one using ``yield from``. + waiting for this one using :keyword:`await` or ``yield from``. -Calling a coroutine does not start its code running -- it is just a -generator, and the coroutine object returned by the call is really a -generator object, which doesn't do anything until you iterate over it. -In the case of a coroutine object, there are two basic ways to start -it running: call ``yield from coroutine`` from another coroutine +Calling a coroutine does not start its code running -- +the coroutine object returned by the call doesn't do anything until you +schedule its execution. There are two basic ways to start it running: +call ``await coroutine`` or ``yield from coroutine`` from another coroutine (assuming the other coroutine is already running!), or schedule its execution using the :func:`async` function or the :meth:`BaseEventLoop.create_task` method. @@ -60,9 +67,15 @@ .. decorator:: coroutine - Decorator to mark coroutines. + Decorator to mark generator-based coroutines. This enables + the generator use :keyword:`!yield from` to call :keyword:`async + def` coroutines, and also enables the generator to be called by + :keyword:`async def` coroutines, for instance using an + :keyword:`await` expression. - If the coroutine is not yielded from before it is destroyed, an error + There is no need to decorate :keyword:`async def` coroutines themselves. + + If the generator is not yielded from before it is destroyed, an error message is logged. See :ref:`Detect coroutines never scheduled `. @@ -84,8 +97,7 @@ import asyncio - @asyncio.coroutine - def hello_world(): + async def hello_world(): print("Hello World!") loop = asyncio.get_event_loop() @@ -111,6 +123,21 @@ import asyncio import datetime + async def display_date(loop): + end_time = loop.time() + 5.0 + while True: + print(datetime.datetime.now()) + if (loop.time() + 1.0) >= end_time: + break + await asyncio.sleep(1) + + loop = asyncio.get_event_loop() + # Blocking call which returns when the display_date() coroutine is done + loop.run_until_complete(display_date(loop)) + loop.close() + +The same coroutine implemented using a generator:: + @asyncio.coroutine def display_date(loop): end_time = loop.time() + 5.0 @@ -120,11 +147,6 @@ break yield from asyncio.sleep(1) - loop = asyncio.get_event_loop() - # Blocking call which returns when the display_date() coroutine is done - loop.run_until_complete(display_date(loop)) - loop.close() - .. seealso:: The :ref:`display the current date with call_later() @@ -139,15 +161,13 @@ import asyncio - @asyncio.coroutine - def compute(x, y): + async def compute(x, y): print("Compute %s + %s ..." % (x, y)) - yield from asyncio.sleep(1.0) + await asyncio.sleep(1.0) return x + y - @asyncio.coroutine - def print_sum(x, y): - result = yield from compute(x, y) + async def print_sum(x, y): + result = await compute(x, y) print("%s + %s = %s" % (x, y, result)) loop = asyncio.get_event_loop() @@ -550,12 +570,14 @@ .. function:: iscoroutine(obj) - Return ``True`` if *obj* is a :ref:`coroutine object `. + Return ``True`` if *obj* is a :ref:`coroutine object `, + which may be based on a generator or an :keyword:`async def` coroutine. -.. function:: iscoroutinefunction(obj) +.. function:: iscoroutinefunction(func) - Return ``True`` if *func* is a decorated :ref:`coroutine function - `. + Return ``True`` if *func* is determined to be a :ref:`coroutine function + `, which may be a decorated generator function or an + :keyword:`async def` function. .. coroutinefunction:: sleep(delay, result=None, \*, loop=None) diff --git a/Doc/library/collections.abc.rst b/Doc/library/collections.abc.rst --- a/Doc/library/collections.abc.rst +++ b/Doc/library/collections.abc.rst @@ -154,21 +154,22 @@ .. class:: Awaitable - ABC for classes that provide ``__await__`` method. Instances - of such classes can be used in ``await`` expression. + ABC for :term:`awaitable` objects, which can be used in :keyword:`await` + expressions. Custom implementations must provide the :meth:`__await__` + method. - :term:`coroutine` objects and instances of - :class:`~collections.abc.Coroutine` are too instances of this ABC. + :term:`Coroutine` objects and instances of the + :class:`~collections.abc.Coroutine` ABC are all instances of this ABC. .. versionadded:: 3.5 .. class:: Coroutine - ABC for coroutine compatible classes that implement a subset of - generator methods defined in :pep:`342`, namely: - :meth:`~generator.send`, :meth:`~generator.throw`, - :meth:`~generator.close` methods. :meth:`__await__` must also be - implemented. All :class:`Coroutine` instances are also instances of + ABC for coroutine compatible classes. These implement the + following methods, defined in :ref:`coroutine-objects`: + :meth:`~coroutine.send`, :meth:`~coroutine.throw`, and + :meth:`~coroutine.close`. Custom implementations must also implement + :meth:`__await__`. All :class:`Coroutine` instances are also instances of :class:`Awaitable`. See also the definition of :term:`coroutine`. .. versionadded:: 3.5 diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -516,12 +516,14 @@ Implements ``del TOS1[TOS]``. -**Coroutines opcodes** +**Coroutine opcodes** .. opcode:: GET_AWAITABLE - Implements ``TOS = get_awaitable(TOS)``; where ``get_awaitable(o)`` - returns ``o`` if ``o`` is a coroutine object; or resolved ``o.__await__``. + Implements ``TOS = get_awaitable(TOS)``, where ``get_awaitable(o)`` + returns ``o`` if ``o`` is a coroutine object or a generator object with + the CO_ITERABLE_COROUTINE flag, or resolves + ``o.__await__``. .. opcode:: GET_AITER diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -162,7 +162,8 @@ .. exception:: GeneratorExit - Raised when a :term:`generator`\'s :meth:`close` method is called. It + Raised when a :term:`generator` or :term:`coroutine` is closed; + see :meth:`generator.close` and :meth:`coroutine.close`. It directly inherits from :exc:`BaseException` instead of :exc:`Exception` since it is technically not an error. @@ -306,7 +307,8 @@ given as an argument when constructing the exception, and defaults to :const:`None`. - When a generator function returns, a new :exc:`StopIteration` instance is + When a :term:`generator` or :term:`coroutine` function + returns, a new :exc:`StopIteration` instance is raised, and the value returned by the function is used as the :attr:`value` parameter to the constructor of the exception. diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -1080,7 +1080,7 @@ :func:`types.coroutine` or :func:`asyncio.coroutine` will not be intercepted). - *wrapper* must be either: + The *wrapper* argument must be either: * a callable that accepts one argument (a coroutine object); * ``None``, to reset the wrapper. @@ -1096,7 +1096,8 @@ return wrap(coro) sys.set_coroutine_wrapper(wrapper) - async def foo(): pass + async def foo(): + pass # The following line will fail with a RuntimeError, because # `wrapper` creates a `wrap(coro)` coroutine: diff --git a/Doc/library/tulip_coro.dia b/Doc/library/tulip_coro.dia index eccf4fa7f5a5e0775fd7ade25e3010c3a194efc1..70a33e3c00cf6e45d425e4c56e9a17561fa8c4ce GIT binary patch literal 4459 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 send 'arg' into coroutine,\n\ -return next yielded value or raise StopIteration."); +return next iterated value or raise StopIteration."); PyDoc_STRVAR(coro_throw_doc, "throw(typ[,val[,tb]]) -> raise exception in coroutine,\n\ -return next yielded value or raise StopIteration."); +return next iterated value or raise StopIteration."); PyDoc_STRVAR(coro_close_doc, "close() -> raise GeneratorExit inside coroutine."); @@ -908,9 +908,9 @@ } static PyMethodDef coro_wrapper_methods[] = { - {"send",(PyCFunction)coro_wrapper_send, METH_O, send_doc}, - {"throw",(PyCFunction)coro_wrapper_throw, METH_VARARGS, throw_doc}, - {"close",(PyCFunction)coro_wrapper_close, METH_NOARGS, close_doc}, + {"send",(PyCFunction)coro_wrapper_send, METH_O, coro_send_doc}, + {"throw",(PyCFunction)coro_wrapper_throw, METH_VARARGS, coro_throw_doc}, + {"close",(PyCFunction)coro_wrapper_close, METH_NOARGS, coro_close_doc}, {NULL, NULL} /* Sentinel */ };