Articles of coroutine

¿Qué pasa con las variables en las funciones de tornado coroutines?

Soy nuevo en el concepto de IO no bloqueante, y hay algo que me cuesta entender: las coroutinas. considera este código: class UserPostHandler(RequestHandler): @gen.coroutine def get(self): var = ‘some variable’ data = json.loads(self.request.body) yield motor_db.users.insert({self.request.remote_ip: data})#asynch non blocking db insert call #success self.set_status(201) print var cuando se llama a la función get , crea la […]

Evite la “excepción ignorada” en el generador mejorado de Python

Tengo un coroutine (Generadores mejorados) en python con un código que se ejecutará después del final de los datos: def mycoroutine(): try: while True: data = (yield) print data finally: raise ValueError print “END” co = mycoroutine() co.next() for i in (1,2,3): co.send(i) La excepción ValueError no se ValueError pero el intérprete simplemente imprime: Exception […]

Coroutines en numba

Estoy trabajando en algo que requiere corrutinas rápidas y creo que numba podría acelerar mi código. Este es un ejemplo tonto: una función que ajusta su entrada y le agrega la cantidad de veces que se ha llamado. def make_square_plus_count(): i = 0 def square_plus_count(x): nonlocal i i += 1 return x**2 + i return […]

¿Cómo crear un bucle de eventos con coroutines rodantes ejecutándose para siempre?

Para evitar el cambio de contexto, quiero crear un gran bucle para atender tanto las conexiones de red como algunas rutinas. Aquí está la implementación para las funciones normales: import asyncio import time def hello_world(loop): print(‘Hello World’) loop.call_later(1, hello_world, loop) def good_evening(loop): print(‘Good Evening’) loop.call_later(1, good_evening, loop) print(‘step: asyncio.get_event_loop()’) loop = asyncio.get_event_loop() print(‘step: loop.call_soon(hello_world, loop)’) […]

Diferencias de rendimiento al utilizar coroutines vs threading.

Hace unos días hice una pregunta en SO sobre cómo ayudarme a diseñar un paradigma para estructurar múltiples solicitudes HTTP Aquí está el escenario. Me gustaría tener un sistema multi-productor, multi-consumidor. Mis productores rastrean y raspan algunos sitios y agregan los enlaces que encuentra en una cola. Dado que rastrearé varios sitios, me gustaría tener […]

En Python, ¿hay una manera de verificar si una función es una “función generadora” antes de llamarla?

Digamos que tengo dos funciones: def foo(): return ‘foo’ def bar(): yield ‘bar’ La primera es una función normal, y la segunda es una función de generador. Ahora quiero escribir algo como esto: def run(func): if is_generator_function(func): gen = func() gen.next() #… run the generator … else: func() ¿Cómo será una implementación sencilla de is_generator_function() […]

Greenlet vs. Trapos

Soy nuevo en gevents y greenlets. Encontré una buena documentación sobre cómo trabajar con ellos, ¡pero ninguna me justificó cómo y cuándo debería usar Greenlets! ¿En qué son realmente buenos? ¿Es una buena idea usarlos en un servidor proxy o no? ¿Por qué no hilos? De lo que no estoy seguro es de cómo pueden […]

¿Cómo se implementan los generadores y las corutinas en CPython?

He leído que en CPython, la stack de intérpretes (la lista de funciones de Python llamadas para llegar a este punto) se mezcla con la stack de C (la lista de funciones de C que fueron llamadas en el propio código del intérprete). Si es así, ¿cómo se implementan los generadores y las coroutinas? ¿Cómo […]

¿Cómo puedo empaquetar una coroutina como función normal en un bucle de eventos?

Estoy usando asyncio para un marco de red. En el siguiente código ( low_level es nuestra función de bajo nivel, el bloque main es nuestra entrada al progtwig, user_func es una función definida por el usuario): import asyncio loop = asyncio.get_event_loop() “””:type :asyncio.AbstractEventLoop””” def low_level(): yield from asyncio.sleep(2) def user_func(): yield from low_level() if __name__ […]

Generador de C ++ equivalente a Python

Tengo un código de ejemplo de Python que necesito imitar en C ++. No requiero ninguna solución específica (como soluciones de rendimiento basadas en la co-rutina, aunque también serían respuestas aceptables), simplemente necesito reproducir la semántica de alguna manera. Pitón Este es un generador de secuencia básico, claramente demasiado grande para almacenar una versión materializada. […]