Articles of coroutine

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

¿Qué puede hacer que la simple invocación de asyncio.new_event_loop () se bloquee?

Estoy usando la siguiente función para forzar a una coroutine a correr sincrónicamente: import asyncio import inspect import types from asyncio import BaseEventLoop from concurrent import futures def await_sync(coro: types.CoroutineType, timeout_s: int=None): “”” :param coro: a coroutine or lambda loop: coroutine(loop) :param timeout_s: :return: “”” loop = asyncio.new_event_loop() # type: BaseEventLoop if not is_awaitable(coro): coro […]

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