[pyar] Algunas dudas con Tornado
Claudio Freire
klaussfreire en gmail.com
Mar Dic 30 19:47:58 ART 2014
2014-12-30 19:35 GMT-03:00 Luis Masuelli <luismasuelli en hotmail.com>:
> 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.
Claro, pero no importa.
El pedazo de código importante es el que no estás mostrando, el de
"expresionQueDevuelveUnValorInmediato" y
"expresionQueDevuelveUnFuturo".
Por eso agregué los ejemplos.
En general, si la función es un @gen.coroutine, tenés que hacer el
yield como lo hiciste:
a = yield hacer(blah)
Si es una función normal que no se bloquea (que devuelve un valor, no
un future, y rápido), no tenés que hacer nada raro:
a = hacer(blah)
El tema es cuando la función no es ni un coroutine ni una función
regular rápida, sino algo que hace I/O bloqueante.
En esos casos tenés que usar un threadpool:
>> threadpool = concurrent.futures.thread.ThreadPoolExecutor(8)
>>
>> def _hacerloPesado():
>> # blabla
>> return 10
>> def hacerAlgoPesado():
>> return threadpool.submit(_hacerloPesado, 3, 4, 5)
O una librería que funcione async-mente, como las libs de tornado mismas:
response = yield AsyncHTTPClient().fetch("http://example.com/")
Todo depende de qué exactamente querés hacer.
More information about the pyar
mailing list