[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