Articles of coroutine

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. […]

¿Convierte las funciones con callback en generadores de Python?

La función de minimización Scipy (solo para usar como ejemplo), tiene la opción de agregar una función de callback en cada paso. Así que puedo hacer algo como def my_callback(x): print x scipy.optimize.fmin(func, x0, callback=my_callback) ¿Hay alguna manera de usar la función de callback para crear una versión generadora de fmin, para que yo pueda […]

Timeout para python coroutines

¿Cómo puedo hacer una parada de coroutine con timeout? No entiendo por qué asyncio.wait_for () no funciona para mí. Tengo tanta tranquilidad de código (planeando hacer mi implementación de cliente telnet): def expect(self, pattern, timeout=20): if type(pattern) == str: pattern = pattern.encode(‘ascii’, ‘ignore’) return self.loop.run_until_complete(asyncio.wait_for(self.asyncxpect(pattern), timeout)) async def asyncxpect(self, pattern): #receives data in a cumulative […]

¿Por qué asyncio no siempre usa ejecutores?

Tengo que enviar muchas solicitudes HTTP, una vez que todas han regresado, el progtwig puede continuar. Suena como una combinación perfecta para asyncio . Un poco ingenuamente, envolví mis llamadas a requests en una función async y las asyncio a asyncio . Esto no funciona. Después de buscar en línea, encontré dos soluciones: usa una […]

¿Qué hace la palabra clave “rendimiento”?

¿Cuál es el uso de la palabra clave de yield en Python? ¿Qué hace? Por ejemplo, estoy tratando de entender este código 1 : def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance – max_dist = self._median: yield self._rightchild Y esta es la persona que llama: result, candidates = [], [self] while candidates: node = […]