[pyar] Equivalente a $.when()

Mariano Guerra luismarianoguerra en gmail.com
Dom Mayo 20 13:27:03 ART 2012


2012/5/20 Lucas <rollbak en gmail.com>

> 2012/5/19 Alejandro Santos <listas en alejolp.com>
>
>> 2012/5/19 Martin Cerdeira <martincerdeira en gmail.com>:
>> > Gente, como va? Para quienes conocen jQuery (dudo que alguien no lo
>> > conozca) les sonará el método $.when() [0], a los que no,
>> > básicamente[1] lo que hace es llamar a n funciones asincronicas
>> > (generalmente) y, definirle callbacks, por ejemplo:
>> >
>> > $.when($.ajax("/page1.php"), $.ajax("/page2.php"))
>> >   .then(myFunc, myFailure);
>> >
>> > La cuestión es, existe un equivalente en el mundo pythonero?
>> >
>>
>> Uhm, hay un problema de semática, no termino de ver cómo querés
>> traducirlo, desde JS a Python.
>>
>> En JS, cuando usás "ajax" estás haciendo una llamada asincrónica, y el
>> browser se encarga de llamar al callback adecuadamente.
>>
>> En Python, ¿qué grupo de funciónes asincrónicas estás intentando invocar?
>>
>> Si, por otro lado, lo que estás buscando es llamar una serie de
>> funciones, y tener alguna clase de notificación cuando ninguna de
>> ellas dispare una excepción, eso se puede mas o menos así:
>>
>> >>> def whenThen(it, sucessCallback, failureCallback):
>> ...     try:
>> ...             for f in it:
>> ...                     f()
>> ...             sucessCallback()
>> ...     except:
>> ...             failureCallback()
>> ...
>>
>> Fijate que es una variante de la función map() sin recibir los valores
>> de la evaluación de las funciones (la doc de jQuery está un poco pobre
>> en cuanto a qué reciben los callbacks).
>>
>>
>> --
>> Alejandro Santos
>>
>

> Eso que usas en JQuery son promesas, lo que hace el when es devolver un
> deferred al cual con el then le seteas un callback y un errback. En python
> el framework mas conocido para hacer ese tipo de cosas es Twisted.
>
>   from twisted.web.client import getPage
>   from twisted.internet import reactor
>   d1 = getPage('http:/ <http://ooici.net/4-oh-four>page1.php')
> d2 = getPage('http:/ <http://ooici.net/4-oh-four>page2.php') d =
> defer.DeferredList([d1, d2])
>   d.addCallbacks(myFunc, myFailure)
>   reactor.run()
>
> Enjoy!
>

tambien podes mirar concurrent.futures, hasta donde se estan en python >=
3.2 pero seguro hay un backport.

http://docs.python.org/dev/library/concurrent.futures.html

saludos!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120520/d3a2f323/attachment.html>


More information about the pyar mailing list