Articles of coroutine

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

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