Threading, sockets, punteros y estructuras de datos en Python

Francesc Alted falted en pytables.org
Lun Jun 16 09:52:33 CEST 2008


A Monday 16 June 2008, Joan Puigcerver escrigué:
> 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).

Benvingut!

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

Si, los diccionarios es lo que buscas.

> - Montículos.

Mira el módulo heapq.

> - Grafos.

Con una mezcla de dicionarios y listas puedes hacer grafos de manera 
sencilla.  Mira:

http://www.python.org/doc/essays/graphs/

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

Salutacions,

-- 
Francesc Alted
------------ 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