[pyar] geventreactor + monkey.patch_all en produccion?

Gonzalo Larralde gonzalolarralde en gmail.com
Lun Sep 23 15:59:53 ART 2013


2013/9/19 Jorge Puente Sarrín <puentesarrin en gmail.com>

> 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.
>

Hola Jorge!

Primero lo primero. Por suerte, hace algunas versiones PymMongo agregó
soporte explicito para Gevent:
http://api.mongodb.org/python/current/examples/gevent.html Por lo cual
"deja" de ser bloqueante cuando Gevent patchea la librería de sockets. Eso
incluye al mongoengine, claro.

De cualquier manera ya mismo estoy tomando nota de Motor. Creo que puede
ser una muy buena opción para algún próximo proyecto Web. Creo que no lo
aclaré, pero este proyecto no es web. La conexión es constante con el
servidor mientras el cliente esté vivo, y el protocolo fue desarrollado
para la app.

Volviendo al tema Twisted, lo que hace geventreactor en realidad es hacer
de Gevent un reactor para Twisted. Por ende (según lo que entiendo) Twisted
en si deja de tener un protagonismo "activo" en cuanto a manejo de recursos
y pasa a ser el framework que se encarga de interpretar los pedidos y
generar el envio de respuestas, pero no que hace el manejo de sockets. Tal
vez estoy subestimando un poco el rol de Twisted en esta configuración,
pero entiendo que no queda en mucho mas que eso.

Muchas gracias por tu respuesta. Ni bien termine con este proyecto y pueda
empezar con otras cosas voy a pegarle una mirada a Motor.

--
Slds,

Gonzalo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130923/2edec584/attachment.html>


More information about the pyar mailing list