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

nicopixel nicopixel en gmail.com
Lun Mayo 20 09:43:53 ART 2013


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130520/1ea6f18b/attachment.html>


More information about the pyar mailing list