Articles of coroutine

Python 3 asyncio – rendimiento de uso de stack vs asyncio.async

Estoy evaluando diferentes patrones para la ejecución periódica (sueño real / demoras por brevedad) utilizando el marco asyncio de Python 3, y tengo dos piezas de código que se comportan de manera diferente y no puedo explicar por qué. La primera versión, que usa el yield from para llamarse a sí misma de forma recursiva, […]

asyncio as_yielded from async generators

Estoy buscando ser capaz de ceder de una serie de coroutines asíncronos. Asyncio’s as_completed es as_completed a lo que estoy buscando (es decir, quiero que cualquiera de los coroutines pueda ceder en cualquier momento a la persona que llama y luego continuar), pero eso solo parece permitir a los coroutines regulares con un solo retorno. […]

Python asyncio: callback al lector y comunicación coroutina.

Estoy tratando de implementar una idea simple de pasar datos de stdin a una coroutine: import asyncio import sys event = asyncio.Event() def handle_stdin(): data = sys.stdin.readline() event.data = data # NOTE: data assigned to the event object event.set() @asyncio.coroutine def tick(): while 1: print(‘Tick’) yield from asyncio.sleep(1) if event.is_set(): data = event.data # NOTE: […]

cola de asyncio consumidor coroutine

Tengo una subclase de asyncio.Protocol recibe datos de un servidor. Estoy almacenando estos datos (cada línea, porque los datos son texto) en un asyncio.Queue . import asyncio q = asyncio.Queue() class StreamProtocol(asyncio.Protocol): def __init__(self, loop): self.loop = loop self.transport = None def connection_made(self, transport): self.transport = transport def data_received(self, data): for message in data.decode().splitlines(): yield […]

¿Qué hace la syntax de “rendimiento desde” en asyncio y en qué se diferencia de “esperar”?

Desde la perspectiva de alguien que ha escrito un código asyncio, pero está buscando entender mejor el funcionamiento interno, qué es lo que se yield from , lo que está await y cómo son útiles para permitir el código asíncrono. Hay una pregunta altamente valorada que pregunta sobre los usos del yield from syntax y […]

¿Por qué mi coroutine bloquea toda la instancia de tornado?

from tornado import web, gen import tornado, time class CoroutineFactorialHandler(web.RequestHandler): @web.asynchronous @gen.coroutine def get(self, n, *args, **kwargs): n = int(n) def callbacker(iterator, callback): try: value = next(iterator) except StopIteration: value = StopIteration callback(value) def factorial(n): x = 1 for i in range(1, n+1): x *= i yield yield x iterator = factorial(n) t = time.time() […]

¿Cuál es la diferencia entre loop.create_task, asyncio.async / asegurar_future y Task?

Estoy un poco confundido por algunas funciones asyncio . Veo que hay una función BaseEventLoop.create_task(coro) para progtwigr una co-rutina. La documentación para create_task dice que es una nueva función y, por compatibilidad, deberíamos usar asyncio.async(coro) que al referirme a los documentos nuevamente que veo es un alias para asyncio.ensure_future(coro) que nuevamente progtwig la ejecución de […]

Haciendo que Django se vuelva verde

Tengo un comando de administración de Django que hace miles de solicitudes TCP / UDP. He usado Gevent para acelerar esto ya que he reestructurado mi código para que funcione como coroutines. Las conexiones de socket ya no se bloquean, pero según lo que he leído, partes de Django aún no están verdes. (Por verde, […]

Se detectó una excepción en el generador de llamadas en Python.

Estoy tratando de atrapar una excepción lanzada en la persona que llama a un generador: class MyException(Exception): pass def gen(): for i in range(3): try: yield i except MyException: print ‘handled exception’ for i in gen(): print i raise MyException Esto produce $ python x.py 0 Traceback (most recent call last): File “x.py”, line 14, […]

¿Es seguro ceder desde dentro de un bloque “con” en Python (y por qué)?

La combinación de adquisiciones de recursos y coroutines parece que podría tener algunas consecuencias involuntarias (o no intuitivas). La pregunta básica es si algo como esto funciona o no: def coroutine(): with open(path, ‘r’) as fh: for line in fh: yield line Lo que hace. (Puedes probarlo!) La preocupación más profunda es que se supone […]