Translate

domingo, 20 de septiembre de 2020

Las Coroutines en python


El nombre Coroutines me suenan a go, será por las goroutines? Bueno, pero veamos como funciona esto en python. 

Las corrutinas son similares a los generadores con algunas diferencias. Las principales diferencias son:

  • los generadores son productores de datos
  • las corrutinas son consumidores de datos

En primer lugar, revisemos el proceso de creación del generador. Podemos hacer generadores como este:


def fib():

    a, b = 0, 1

    while True:

        yield a

        a, b = b, a+b


Luego lo usamos comúnmente en un bucle for como este:


for i in fib():

    print(i)


 Las corrutinas consumen valores que se le envían. Un ejemplo muy básico sería una alternativa grep en Python:


def grep(pattern):

    print("Searching for", pattern)

    while True:

        line = (yield)

        if pattern in line:

            print(line)


yield en este caso no contiene ningún valor, sino que le proporcionamos valores externamente. Suministramos valores mediante el método .send(). Aquí hay un ejemplo:


search = grep('coroutine')

next(search)

# Output: Searching for coroutine

search.send("I love you")

search.send("Don't you love me?")

search.send("I love coroutines instead!")

# Output: I love coroutines instead!


Es necesario para iniciar la corrutina, correr next. Al igual que los generadores, las corrutinas no inician la función de inmediato. En su lugar, lo ejecutan en respuesta a los métodos __next __ () y .send (). Por lo tanto, debe ejecutar next () para que la ejecución avance a la expresión yield.

Podemos cerrar una corrutina llamando al método .close ():

search = grep('coroutine')

# ...

search.close()

Y listo!!

Dejo link: https://book.pythontips.com/en/latest/coroutines.html