[pyar] Consulta sobre twisted.

Gilgamezh listas en gilgamezh.me
Jue Dic 26 10:32:03 ART 2013


El 2013-12-24 00:14, Facundo Batista escribió:
> 2013/12/20 Gilgamezh <listas en gilgamezh.me>:
> 
>> Mi duda es cómo debería realizar esas otras llamadas.
>> 
>> Las hago todas dentro de la función que se llama en el callback y dejo 
>> que
>> se realicen en serie? Cómo hago para que eso se haga de manera 
>> asincrónica y
>> no bloquee el resto de los chequeos?
> 
> Depende. ¿Esas llamadas van a tardar? En tu caso, sí. Mandar un mail,
> o tocar la DB, puede tardar 1ms o 5s.
> 
> Quizás encuentres en twisted (no busqué) una forma de mandar un mail
> de forma asíncrónica... ahí tendrías ese problema resuelto.
> 
> Pero todavía te queda la DB, que sería bloqueante. Lo que se usa en
> estos casos es ejecutar eso en un thread, lo cual twisted te facilita
> mucho a través de la llamada deferToThread:
> 
> 
> http://twistedmatrix.com/documents/current/api/twisted.internet.threads.deferToThread.html
> 
> Slds.

Facundo, muchas gracias por tu respuesta! :)

Está muy bueno lo de thread. Habia mirado algo por arriba y trate de 
dejarlo de lado para no meterme más ruido en la capocha XD.
Lo de buscar una manera asincrónica de enviar un mail no se me había 
ocurrido. lo voy a buscar, después les comento si encontre algo.

La otra noche estuve en #twisted preguntando y me respondieron algunas 
cosas interesantes. Según entendí si a un deferred le pones None como 
valor de respuesta (o efectivamente no le pones nada) nadie va a esperar 
el resultado del mismo.

Va adjunto lo que pregunte y las respuestas. Abajo las lineas que me 
parecen destacables.

19:10 < amacleod> GiLgAmEzH, maybe that's not what you would want it to 
do, though, so you might want to do the "email" and "log to DB" steps in 
"parallel".
19:12 < GiLgAmEzH> amacleod: if "parallel" way is posible Yes. but i 
don't know how :D
19:12 < amacleod> GiLgAmEzH, it's a little hard to explain on one line, 
but here's an attempt: d = webRequest(); d.addErrback(yellAboutError); 
def yellAboutError(e):
                   emailError(e); dbLogError(e)
19:13 < amacleod> Those last two expressions are meant to be the body of 
yellAboutError. Since there's no return statement in yellAboutError, the 
effective return value is
                   None.
19:14 < amacleod> Meaning that the callback chain will resume with the 
"callback" side of the next link in the chain (if there is one), with 
None as the callback argument.
19:14 < amacleod> The way I wrote it, the initial deferred's chain of 
callbacks won't wait for the email and DB operations to complete. It'll 
essentially forget about them.



saludos!!
------------ próxima parte ------------
An embedded and charset-unspecified text was scrubbed...
Name: twisted.irc
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20131226/dd36fc2a/attachment.ksh>


More information about the pyar mailing list