[pyar] Algunas dudas con Tornado

Luis Masuelli luismasuelli en hotmail.com
Mar Dic 30 19:35:53 ART 2014


Gracias! Igual me equivoqué (y de ahí el tema q tengo) - los valores cedidos no son automáticamente pasados a maybe_future. De ahí que tenga esa excepción.

> Date: Tue, 30 Dec 2014 17:15:52 -0300
> From: klaussfreire en gmail.com
> To: pyar en python.org.ar
> Subject: Re: [pyar] Algunas dudas con Tornado
> 
> 2014-12-30 16:49 GMT-03:00 Luis Masuelli <luismasuelli en hotmail.com>:
> > Lo que tengo entendido es que esta funcion, asi como la puse (es un caso de
> > ejemplo, pero una funcion deberia poder hacer yield de las dos cosas - hasta
> > donde tengo entendido, tornado wrappea esos valores con maybe_future para
> > que siempre quede un Future, siendo el caso de una future ya resuelta para
> > envolver valores que no sean Futures de antemano), debería schedulearse en
> > tres pasos (inicio hasta primer yield; asignacion a "a" hasta segundo yield;
> > asignacion a b hasta comando print). Lo que no se es como hacer para
> > schedulear esa funcion dentro del ioloop (ya intenté usando).
> >
> > Digamos que ya intente lo siguiente pero recibo un BadYieldError cuando se
> > trata de un valor inmediato:
> >
> >     tornado.ioloop.IOLoop.instance().spawn_callback(mirutina, mensaje,
> > "foo")
> 
> 
> Nunca tenés que devolver un valor inmediato.
> 
> Si una rutina devuelve un Future, tiene que devolver siempre Future,
> sino se vuelve una pesadilla invocarla.
> 
> La solución cuando ya conocés el valor que tiene que tener el future
> al salir de la rutina, es devolver el future ya con el valor:
> 
> def hacerAlgoRapido():
>    f = tornado.concurrent.Future()
>    f.set_result(3)
>    return f
> 
> Cuando lo que vas a hacer es pesado, si las librerías que vas a usar
> no soportan ya trabajar con futures o con el I/O loop de Tornado, vas
> a tener que usar un thread.
> 
> Pero no necesitás levantar un thread por cada tarea, podés usar un threadpool.
> 
> Si tenés concurrent (en python3 es de la stdlib, o en py2 lo podés
> instalar), podés usar concurrent.futures.thread.ThreadPoolExecutor.
> 
> Entonces:
> 
> threadpool = concurrent.futures.thread.ThreadPoolExecutor(8)
> 
> def _hacerloPesado:
>    # blabla
>    return 10
> def hacerAlgoPesado():
>    return threadpool.submit(_hacerloPesado, 3, 4, 5)
> 
> Y listo.
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
> 
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
> 
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20141231/79d0a82b/attachment.html>


More information about the pyar mailing list