Articles of asíncrono

Cómo detectar errores no manejados en diferido originados desde reactor.stop ()

Soy nuevo en Twist y tengo problemas con el siguiente script. Cuando corro lo siguiente: #!/usr/bin/env python from twisted.internet import defer from twisted.web.client import getPage, reactor def success(results): print ‘success’ def error(results): print ‘error’ return results def finished(results): print ‘finished’ reactor.stop() tasks = [] d = getPage(‘thiswontwork’).addCallback(success).addErrback(error) tasks.append(d) dl = defer.DeferredList(tasks) dl.addCallback(finished) reactor.run() Me sale […]

Python async y tareas vinculadas a la CPU?

Recientemente he estado trabajando en un proyecto para mascotas en python usando un matraz. Es un simple pastebin con soporte de resaltado de syntax del lado del servidor con pygments Debido a que esta es una tarea costosa, delegué el resaltado de syntax a una cola de tareas de apio y en el controlador de […]

Tornado Async HTTP devolviendo resultados incrementalmente

Por lo que entiendo de los documentos del módulo tornado.gen es que tornado.gen.Task se compone de tornado.gen.Callback y tornado.gen.Espera con cada par de Callback / Wait asociado con teclas únicas … @tornado.web.asynchronous @tornado.gen.engine def get(self): http_client = AsyncHTTPClient() http_client.fetch(“http://google.com”, callback=(yield tornado.gen.Callback(“google”))) http_client.fetch(“http://python.org”, callback=(yield tornado.gen.Callback(“python”))) http_client.fetch(“http://tornadoweb.org”, callback=(yield tornado.gen.Callback(“tornado”))) response = yield [tornado.gen.Wait(“google”), tornado.gen.Wait(“tornado”), tornado.gen.Wait(“python”)] do_something_with_response(response) self.render(“template.html”) […]

Ejecutando una tarea de fondo asíncrono en Tornado

Al leer la documentación de Tornado, es muy claro cómo llamar a una función asíncrona para devolver una respuesta: class GenAsyncHandler(RequestHandler): @gen.coroutine def get(self): http_client = AsyncHTTPClient() response = yield http_client.fetch(“http://example.com”) do_something_with_response(response) self.render(“template.html”) Lo que falta es cómo debe hacerse una llamada de forma asíncrona a una tarea en segundo plano que no tiene relevancia […]

¿Cómo puedo usar Tornado y Redis de forma asíncrona?

Estoy tratando de encontrar cómo puedo usar Redis y Tornado de forma asíncrona. Encontré el tornado–redis pero necesito más que simplemente agregar un yield en el código. Tengo el siguiente código: import redis import tornado.web class WaiterHandler(tornado.web.RequestHandler): @tornado.web.asynchronous def get(self): client = redis.StrictRedis(port=6279) pubsub = client.pubsub() pubsub.subscribe(‘test_channel’) for item in pubsub.listen(): if item[‘type’] == ‘message’: […]

tornado web http request bloquea otras solicitudes, como no bloquear otras solicitudes

import tornado.web import Queue QUEUE = Queue.Queue() class HandlerA( tornado.web.RequestHandler ): def get(self): global QUEUE self.finish(QUEUE.get_nowait()) class HandlerB( tornado.web.RequestHandler ): def get(self): global QUEUE QUEUE.put(‘Hello’) self.finish(‘In queue.’) Problema: HandlerA bloquea HandlerB durante 10 segundos. El navegador A manejado por HandlerA y espera … El navegador B manejado por HandlerB y espera … hasta excepciones de […]

Procesamiento Asíncrono Django

Tengo un montón de solicitudes de Django que ejecutan algunos cálculos matemáticos (escritos en C y ejecutados a través de un módulo Cython) que pueden tomar una cantidad indeterminada (en el orden de 1 segundo) de tiempo para ejecutar. Además, las solicitudes no necesitan acceder a la base de datos y son todas independientes entre […]

¿Cuál es la diferencia entre los decoradores @ types.coroutine y @ asyncio.coroutine?

Las documentaciones dicen: @ asyncio.coroutine Decorador para marcar corutines basados ​​en generadores. Esto permite que el generador use el rendimiento para llamar a las definiciones de sincronía, y también permite que el generador sea llamado por las definiciones de sincronía, por ejemplo, utilizando una expresión de espera. _ @ types.coroutine (gen_func) Esta función transforma una […]

Cómo enviar un correo electrónico asíncrono usando django.

Este es mi código: class EmailThread(threading.Thread): def __init__(self, subject, html_content, recipient_list): self.subject = subject self.recipient_list = recipient_list self.html_content = html_content threading.Thread.__init__(self) def run (self): msg = EmailMultiAlternatives(self.subject, self.html_content, EMAIL_HOST_USER, self.recipient_list) #if self.html_content: msg.attach_alternative(True, “text/html”) msg.send() def send_mail(subject, html_content, recipient_list): EmailThread(subject, html_content, recipient_list).start() No envía correo electrónico. ¿Que puedo hacer?

En Python, ¿hay un asíncrono equivalente a multiproceso o concurrent.futures?

Básicamente, estoy buscando algo que ofrezca un mapa paralelo que use python3 coroutines como backend en lugar de hilos o procesos. Creo que debería haber menos gastos generales cuando se realiza un trabajo de IO altamente paralelo. Seguramente ya existe algo similar, ya sea en la biblioteca estándar o en algún paquete ampliamente utilizado?