[pyar] geventreactor + monkey.patch_all en produccion?

Jorge Puente Sarrín puentesarrin en gmail.com
Jue Sep 19 22:50:21 ART 2013


Hola Gonzalo,

Es la primera vez que participo en esta lista y me gusta mucho su actividad.

Tu propuesta me parece bastante interesante y lo digo porque me parece muy
bueno eso de combinar Twisted con Greenlet, no sabría darte alguna opinión
sobre estos módulos, pero me anima mucho a investigarlos.

Lo que si veo algo inquietante es el ORM que estás usando, no sé en qué
parte exactamente lo estás usando (ni qué tanto). MongoEngine utiliza
PyMongo y es un driver bloqueante y me imagino que podrías encontrar muchas
mejoras usando Motor o MongoTor.

https://github.com/mongodb/motor
https://github.com/marcelnicolay/mongotor

Motor es un driver asíncrono para Tornado y MongoDB que utiliza Greenlet
para su IOStream y está bien mantenido por MongoDB Inc., mientras que
MongoTor es puramente Tornado y tiene un ORM incluido (y a mi parecer
pretender funcionar igual que el de Django). Existe otro que es asyncmongo
que lo había liberado Bit.ly, pero ya no está mantenido y no soporta
ReplicaSets.

Quizá no sea una opción para ti usar Tornado, pero sólo como acotación,
haciendo ese cambio no tendrías problemas con Pika porque también tiene un
adaptador para que la conexión utilice este bucle de eventos.

https://github.com/pika/pika/blob/master/pika/adapters/tornado_connection.py

Saludos.



2013/9/19 Gonzalo Larralde <gonzalolarralde en gmail.com>

> Hola mundo,
>
> Comento una situación: Estamos desarrollando un server para una app de
> iOS. Esta app tiene, entre otras cosas, comunicación con un par de APIs
> cuyas implementaciones usan urllib2. Puntualmente Facebook y OpenTok.
>
> El tema es, el server está hecho sobre twisted, pero dada esta situación
> me pareció una buena opción usar geventreactor (
> https://github.com/jyio/geventreactor) y aplicar el monkey patch que hace
> gevent sobre los sockets, ssl, y un par de modulos mas, para que sean
> "greenlet cooperative".
>
> Ya lo tengo funcionado, y al menos con pruebas chicas está respondiendo
> muy bien. Bah, es lo que asumo con las métricas pobres que tengo: puse un
> contador que muestra cuanto tiempo pasó desde la ultima llamada - el tiempo
> de espera (resultado ideal = 0) y da valores que no pasan de los 10
> milisegundos (en mi mauqina, con todo el bardo que tengo corriendo), por lo
> cual el thread no se bloquea. El tiempo gral de respuesta es el esperado.
>
> La pregunta es: es lo suficientemente fiable este monkey patching que hace
> gevent? Alguien tuvo experiencia usando esto (sea con geventreactor o bien
> con gevent) en alguna implementación que esté en producción? A que
> conclusiones llegaron en tal caso?
>
> Se agradece cualquier referencia (buena o mala) que me puedan dar sobre el
> tema. En "los papeles" la implementación funciona, pero tengo miedo de
> salir a producción y pegarme un palo.
>
> PD: El server también usa mongoengine como ORM, y pika + rabbit para
> comunicación entre instancias. No aporta a la pregunta, pero mejor poner en
> contexto :)
>
> --
> Slds,
>
> Gonzalo.
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



-- 
Jorge Puente Sarrín.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130919/95859e65/attachment.html>


More information about the pyar mailing list