Threading, sockets, punteros y estructuras de datos en Python

Joan Puigcerver joapuipe en gmail.com
Lun Jun 16 00:59:31 CEST 2008


Hola.

Soy nuevo en la lista de correo y se podría decir que nuevo en Python
también (he trasteado un poco con él, nada más). Me surgen algunas dudas
respecto al lenguaje, pero creo que voy a tener que "enrrollarme" un poco
para explicarlas, así que allá va:

Realicé un programa en C que te permitia calcular El Número de Bacon entre
de un actor (el grado de separación entre éste y Kevin Bacon). Para calcular
el grado de separación primero construía un grafo donde relacionaba a todos
los actores (los datos los conseguí de www.imdb.com) y después aplicaba el
algoritmo de Dijsktra para calcular el camino más corto entre dos vértices
del grafo (cada vértice era un actor).

El programa era un "reto" de la asignatura de Programación (estudio 1o de
Ing. Informática), así que no es nada profesional. Ahora me he propuesto
seguir avanzando con el "reto" y construir una página web que te permita
calcular el Número de Bacon desde ella. Para eso he pensado crear una
aplicación servidor que sería la encargada de calcular el número, la
aplicación web sólo tendría que enviar la petición e interpretar los
resultados que le enviase el servidor.

Como he dicho, he trasteado un poco con Python y jugué con los Sockets y los
Threads (hice una especie de trivial para el IRC) y pensé que sería un buen
lenguaje para implementar el servidor, debido a su simplicidad y elegancia.
Me gustó cuando jugué con él y quería aprender.

Pues bien, lo que se me ha ocurrido es crear una aplicación servidor que
carga el grafo y el resto de datos. Después, desde la web, se envia una
petición para calcular un número entre dos actores y en el servidor se habre
un hilo para calcular el grado de separación entre los actores. La idea es
que pueda haber más de un cliente conectado a la vez al servidor.

Pero bueno, antes de todo eso, primero hay que crear las estructuras de
datos necesarias y cargar los datos. ¿Que estructuras necesito?
- Tablas Hash (Python lleva los "diccionarios").
- Montículos.
- Grafos.

Bueno, la cuestión es que para implementar estas estructuras de datos en C,
yo utilizaba los punteros y me venían la mar de bien porqué suponen una gran
optimización (te evitas duplicar datos) en cuanto al coste en memoria (para
que os hagáis una idea hay 1,5 millones de actores y unas 700.000 películas
así que el grafo va a tener unos 2,3 millones de vértices...). ¿Cómo me lo
puedo montar el Python? ¿Existe algo parecido a los punteros en Python?

Podéis dar un vistazo a la web del programilla que hice: www.jpuigcerver.net.
Allí están explicadas las estructuras de datos que utilicé. Lamentablemente
la página se encuentra disponible sólo en catalán, pero si véis las
ilustraciones estoy seguro de que las entenderéis perfectamente ;)

Gracias y saludos!

-- 
Joan Puigcerver
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es