from queue import Queue
from functools import wraps
def aplicar_asincronismo(funcion, args, *, callback):
resultado = funcion(*args)
callback(resultado)
class Asincronica:
def __init__(self, funcion, args):
self.funcion = funcion
self.args = args
def asincronismo(funcion):
@wraps(funcion)
def envoltura(*args):
f = funcion(*args)
cola = Queue()
cola.put(None)
while True:
resultado = cola.get()
try:
a = f.send(resultado)
aplicar_asincronismo(a.funcion, a.args, callback=cola.put)
except StopIteration:
break
return envoltura
def sumar(x, y):
return x + y
@asincronismo
def prueba():
r = yield Asincronica(sumar, (2, 3))
print(r)
r = yield Asincronica(sumar, ('Python', ' 3.x'))
print(r)
for n in range(10):
r = yield Asincronica(sumar, (n, n + 1))
print(r)
print('Cierre')
prueba()