[pyar] Presentación y consulta (Sockets -> envío de datos )

Angel Java Lopez ajlopez2000 en gmail.com
Lun Mayo 20 09:51:33 ART 2013


Hola gente!

Hmmm... eso en mi barrio se llama consumer-producer :-)

Sin saber python, busque "consumer producer python" en Google, y encontre
enlaces que podrian ayudar:

http://docs.python.org/2/library/queue.html
http://smherwig.blogspot.com.ar/2012/09/producer-consumer-model-with-python.html
http://www.informit.com/articles/article.aspx?p=1850445&seqNum=8

Desconozco su "accuracy" en el estado actual de Python

Nos leemos!

Angel "Java" Lopez
@ajlopez




2013/5/20 nicopixel <nicopixel en gmail.com>

> Sigo intentando resolver esto pero me topé con más inconvenientes:
>
> Tengo 2 threads (colectores) encargados de conectarse a servidores y
> recibir datos
> de distintos lugares. Luego éste es el encargado de almacenar la
> información
> en una cola para que venga un tercer hilo (sender) que envie la
> información de la
> cola y la vaya vaciando.
>
> Problema:
>
> 1- Intenté hacerlo con una base sqlite, la idea era genial pero no soporta
> acceso concurrente de lectura y escritura
>
> 2- Intenté hacerlo con shelve pero sucede lo mismo que con sqlite
>
> ¿Que otra alternativa podría usar?
>
> Quisiera prescindir de utilizar servidores de bases de datos o de MQ's
>
> Gracias!
>
>
>
>
> El 16 de mayo de 2013 20:53, nachopro <tranceway en gmail.com> escribió:
>
> Mirá, para resolverlo con la metodología "de parado" o tener un proof
>> of concept usá multiprocessing:
>>
>> Hacés el worker que recibe los datos por socket y los guarda en una
>> Queue de multiprocessing; y luego hacés otro worker que vaya
>> consumiendo esa cola y haga con la info lo que necesites. Es muy
>> divertido, después cuando lo tengas funcionando y te sientas feliz de
>> la vida te fijás de adaptar eso a lo que te comentó luís (por un lado
>> te realizás como programador y por el otro afinás todo, reducís código
>> y te queda más canchero)
>>
>> Cualquier cosa, si bien trabaja contra rabbitmq (tranquilamente
>> cambiable a archivos en disco) fijate esto:
>> https://github.com/nachopro/baserguin
>>
>> Saludos!
>>
>> 2013/5/16 nicopixel <nicopixel en gmail.com>:
>> > Muchas gracias por sus respuestas!!
>> >
>> > Angel, un gusto saludarte. He ido a una de tus charlas sobre Java
>> > hace unos años, a ver cuando me entero de alguna para Python :-)
>> >
>> > Por ahora comencé a guardar cada dato recibido con un ID autonumerico
>> > y luego haré un fichero que se sobreescriba siempre con el ultimo ACK.
>> >
>> > Pero me preocupa el consumo de recursos, porque necesito:
>> >
>> > 1- Fichero donde almacenar el ultimo valor de mi contador de datos (ID
>> de
>> > paquete)
>> > 2- Fichero donde guardar los datos recibidos
>> > 3- Fichero que guarda los ACK.
>> >
>> > Por otra parte, Luis te agradezco mucho tu respuesta, voy a leer
>> > sobre esas tecnologías porque no las conocía, parecen excelentes!!
>> > Y seguramente resuelven todo de una forma mas eficiente que lo que
>> podría
>> > hacerlo yo.
>> >
>> > Todo esto irá en un Raspberry así que mi idea sería instalar la menor
>> > cantidad de servicios posibles y que la app sea en lo posible, portable.
>> > Por esta razón no uso ni rabbitmq ni una DB.
>> >
>> > Como la idea es aprender, haré ambas cosas y a ver con que me quedo :)
>> >
>> > Gracias por las ideas !!
>> >
>> >
>> >
>> >
>> >
>> >
>> > El 16 de mayo de 2013 12:04, Luis I. Facciolo <lifacciolo en gmail.com>
>> > escribió:
>> >
>> >> Perdon que responda en varios mails, pero me acorde de otra cosa,
>> zeromq
>> >> te va a rendir para la parte de la capa de transporte, ahora para
>> almacenar
>> >> las cosas en la maquina, podes usar el modulo shelv (breve tutorial:
>> >> http://scienceoss.com/store-python-objects-so-you-can-use-them-later/)
>> de
>> >> modo que esta libreria se encargue de tu persistencia en disco (no es
>> lo mas
>> >> optimo para esto, lo ideal seria usar alguna db orientada a objetos, a
>> mi
>> >> gusto, como podria ser couchdb, mongodb, etc, pero para un primer
>> >> acercamiento, o proof of concept, iria bien)
>> >>
>> >> Con estas 2 cosas, zeromq, y shelve, resolves el 90% de tu programa, y
>> en
>> >> bastantes pocas lineas de codigo.
>> >>
>> >> Despues comentanos si te sirvio esto o de que manera lo resolviste.
>> >>
>> >> Saludos!
>> >>
>> >>
>> >> El 16 de mayo de 2013 12:01, Luis I. Facciolo <lifacciolo en gmail.com>
>> >> escribió:
>> >>
>> >>> Pegale una mirada a http://www.zeromq.org/ que para esto es ideal :)
>> >>>
>> >>> Saludos!
>> >>>
>> >>>
>> >>> El 16 de mayo de 2013 11:21, Angel Java Lopez <ajlopez2000 en gmail.com>
>> >>> escribió:
>> >>>
>> >>>> Hola gente!
>> >>>>
>> >>>> Ni idea como hacerlo en Python ;-)
>> >>>>
>> >>>> Pero yo, como primer baby step, implementaria:
>> >>>>
>> >>>> - Cola de mensajes en memoria (uno de mis temas preferidos ;-)
>> >>>> - El archivo de mensajes, como tenes ahora, grabando lo que vas
>> >>>> recibiendo, pero identificandolo por nro
>> >>>> - Cuando de la otra IP te mandan ACK, grabas en un segundo archivo:
>> >>>> Mensaje 17 ACK. Puede que convenga sobreescribirlo cada vez
>> >>>>
>> >>>> Si se cae todo:
>> >>>>
>> >>>> - Leo el segundo archivo, donde dice "Mensaje 17 ACK"
>> >>>> - Leo el primer archivo, salteo todos los mensajes hasta el 17
>> >>>> exclusivo.
>> >>>> - El resto de los mensajes constituyen la nueva cola en memoria
>> >>>>
>> >>>> Problema:
>> >>>> - La otra IP te manda el ACK.
>> >>>> - Y cuando tu programa va a grabar el ACK en el segundo archivo, se
>> >>>> muere muerto muerto
>> >>>>
>> >>>> La idea general: aprovechar el archivo que ya tenes con los mensaje
>> >>>>
>> >>>> Problema:
>> >>>> - Me podes decir: el archivo de mensajes que ya tengo, tienen diez
>> >>>> millones de mensajes
>> >>>> Solucion:
>> >>>> - Grabaria un archivo por mensajes recibidos en tal X minuto, o tal Y
>> >>>> hora, o lo que sea
>> >>>>
>> >>>> Angel "Java" Lopez
>> >>>> @ajlopez
>> >>>>
>> >>>>
>> >>>>
>> >>>> 2013/5/16 nicopixel <nicopixel en gmail.com>
>> >>>>>
>> >>>>> print('Hola amigos pythonicos!!')
>> >>>>>
>> >>>>> Ante todo me presento, me llamo Nico y soy de Buenos Aires.
>> >>>>>
>> >>>>> Hace rato que leo sus mails y  me encantaría participar de forma
>> activa
>> >>>>> en esta lista,
>> >>>>> aunque por lo pronto dudo tener los conocimientos necesarios para
>> poder
>> >>>>> brindarle ayuda a alguien.
>> >>>>>
>> >>>>> Desde hace ya un tiempo  que estoy jugando con Python,
>> >>>>> cada vez estoy mas enganchado e intento difundirlo.
>> >>>>> Este lenguaje hizo que casi me olvide de usar C y con respecto a la
>> web
>> >>>>> me encanta Django!
>> >>>>>
>> >>>>> Suelo tener muchas dudas, ese tipo de dudas en las que Google no te
>> >>>>> ayuda mucho.
>> >>>>> Como por ejemplo: "Cual es la  manera mas pythonica de resolver X
>> >>>>> cosa?" o "cómo estructurar
>> >>>>> mejor mi proyecto?".
>> >>>>>
>> >>>>> Aprovecho plantearles una de ellas a ver si me pueden orientar:
>> >>>>>
>> >>>>> Tengo una aplicación que se conecta mediante sockets a un
>> dispositivo,
>> >>>>> lee información
>> >>>>> y la deja guardada en archivos de texto.
>> >>>>>
>> >>>>> Hasta ahí todo bien, el tema es que necesito que cada dato recibido
>> sea
>> >>>>> reenviado a otra IP
>> >>>>> y puerto pero NO puedo permitirme que se pierda información.
>> >>>>> Razón por la cual debería almacenarlo en algún fichero temporal a
>> modo
>> >>>>> de buffer
>> >>>>> (no dispongo de recursos como para utilizar rabbitmq)
>> >>>>>
>> >>>>> Mi idea sería implementar ese fichero como si fuera una cola:
>> >>>>> Ir guardando datos y que haya un "demonio" que vaya enviando
>> siempre el
>> >>>>> dato
>> >>>>> mas viejo (mientras se van encolando los datos nuevos).
>> >>>>> Ese demonio intentaría enviar el dato y cuando recibe el ACK, envía
>> el
>> >>>>> siguiente dato.
>> >>>>>
>> >>>>> Cuál sería la mejor manera de hacer esto?
>> >>>>>
>> >>>>> Gracias!
>> >>>>> Nico
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> _______________________________________________
>> >>>>> 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
>> >>>>
>> >>>>
>> >>>>
>> >>>> _______________________________________________
>> >>>> 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
>> >>>
>> >>>
>> >>
>> >>
>> >> _______________________________________________
>> >> 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
>> >
>> >
>> >
>> > _______________________________________________
>> > 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
>>
>>
>>
>> --
>> ignacio benedetti a.k.a. nachopro
>> mailto:tranceway en gmail.com
>> http://blog.nachopro.com.ar/
>> _______________________________________________
>> 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
>>
>
>
> _______________________________________________
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130520/c817d58e/attachment.html>


More information about the pyar mailing list