[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