Coroutines
Learn about the close, throw, and send methods to support coroutines in Python.
The idea of a coroutine is to have a function, whose execution can be suspended at a given point in time, to be later resumed. By having this kind of functionality, a program might be able to suspend a part of the code, in order to dispatch something else for processing, and then come back to this original point to resume.
As we already know, generator objects are iterables. They implement __iter__()
and __next__()
. This is provided by Python automatically so that when we create a generator object function, we get an object that can be iterated or advanced through the next()
function.
Besides this basic functionality, they have more methods so that they can work as coroutines (PEP-342). In this lesson, we'll explore how generators evolved into coroutines to support the basis of asynchronous programming before we explore the new features of Python and the syntax that covers programming asynchronously.
The basic methods added in PEP-342 to support coroutines are:
.close()
.throw(ex_type[, ex_value[, ex_traceback]])
.send(value)
Python takes advantage of generators in order to create coroutines. Because generators can naturally suspend, they're a convenient starting point. But generators weren't enough as they were originally thought to be, so these methods were added. This is because typically, it's not enough to just be able to suspend some part of the code; we also want to communicate with it (pass data and signal about changes in the context).
By exploring each method in more detail, we'll be able to learn more about the internals of coroutines in Python. After this, we'll present another recapitulation of how asynchronous programming works, but unlike the one presented ...