1 Demostraciones Técnicas – Santa Fe 2006 1 Demostraciones Técnicas Santa Fe 2006 Facundo Batista [email protected] www.taniquetil.com.ar Arte gráfico: Diana Batista
2 Demostraciones Técnicas – Santa Fe 2006 2 Indice ➢ Procesamiento distribuído ➢ TurboGears ➢ Web services ➢ Un buscador
3 Demostraciones Técnicas – Santa Fe 2006 3 Procesamiento Distribuido ➢ Motivación ➢ SimpleXMLRPCServer ➢ reparteThreads
4 Demostraciones Técnicas – Santa Fe 2006 4 Motivación ● Imaginemos el siguiente escenario: ✗ Tenemos una tarea que implica mucho procesamiento ✗ La podemos dividir en subtareas, que pueden ejecutarse en cualquier otra computadora ✗ Hay varias computadoras con procesador libre ● Necesitamos distribuir el proceso ✗ Pero somos vagos y no queremos trabajar mucho ● Usamos SimpleXMLRPCServer y reparteThreads
5 Demostraciones Técnicas – Santa Fe 2006 5 SimpleXMLRPCServer Permite ejecutar una función que reside en otra computadora, a través de la red: serv = SimpleXMLRPCServer(('localhost', 9000)) serv.register_function(miFuncion) serv.serve_forever() A partir de este momento, podemos ejecutar miFuncion desde cualquier otra máquina: serv = xmlrpclib.Server('http://otra.maq:9000') result = serv.miFuncion(parametros)
6 Demostraciones Técnicas – Santa Fe 2006 6 reparteThreads Si en lugar de uno, levantamos muchos servidores, necesitamos distribuir las subtareas entre ellos: from reparteThreads import Repartidor rep = Repartidor(servers, "miFuncion") rep.encolar(parametro_1) rep.encolar(parametro_2)... rep.encolar(parametro_n) result = rep.procesar() Automágicamente, al comenzar a procesar, se abrirá un hilo por server, y se los irá alimentando con las subtareas.
7 Demostraciones Técnicas – Santa Fe 2006 7 TurboGears ➢ Motivación ➢ Componentes ➢ Funcionamiento
8 Demostraciones Técnicas – Santa Fe 2006 8 Motivación Mi novia vino y me dijo... Me gustaría tener un sistemita para administrar mis CDs Lo que mis oídos geeks tradujeron a... ¡Qué buena oportunidad para aprender un framework de aplicaciones Web! Entonces decidí probar TurboGears.
9 Demostraciones Técnicas – Santa Fe 2006 9 Componentes ● El modelo, el modelo ✗ Código Python, pero es SQLObject ✗ Define el modelo de datos de la aplicación ● Plantillas KID ✗ Son plantillas de páginas HTML ✗ Tomándolas se generan dinámicamente las páginas finales ✗ Son más poderosas que un HTML (e.g.: tenemos un for) ● Controllers ✗ Código Python ✗ Cada método es el par de una plantilla KID ✗ Los métodos se ejecutan antes o después de ir a la plantilla
10 Demostraciones Técnicas – Santa Fe 2006 10 Funcionamiento ● Si de una página se llama a una URL... ✗ Se ejecuta el método del Controller con ese nombre ✗ Recibe el query de la URL como parámetros ✗ Lo que devuelve es info que va a la plantilla ✗ Se arma un HTML dinámico con esta info ✗ Que puede terminar llamando a una URL... ● Y la magia está en que ✗ Tengo comunicación entre HTML y Python ✗ Pasando y recibiendo la info de manera fácil ✗ ¡Y funciona!
11 Demostraciones Técnicas – Santa Fe 2006 11 Web Services ➢ ¿Qué son? ➢ Llamando a un WS ➢ Armando un WS
12 Demostraciones Técnicas – Santa Fe 2006 12 ¿Qué son los Web Services? ● Un WS es un servicio... ✗ al cual se llama mediante un request HTTP ✗ realiza un determinado procesamiento ✗ devuelve un resultado o código de error ● Ejemplos de Web Services ✗ http://server.com/emplead/alta?nom=Juan&edad=32 ✗ http://192.168.14.77/abm_clientes/baja ● Los parámetros se pueden pasar de varias maneras ● El WS responde sincrónicamente con un texto
13 Demostraciones Técnicas – Santa Fe 2006 13 Llamando a un WS ● Por GET: se ven los parámetros en la misma URL ✗ http://server.com/emplead/alta?nom=Juan&edad=32 ● Por POST: un campo de texto viaja en el request ✗ URL: http://miserver.com/empleados/alta ✗ y escondido viaja: nom=Juan&edad=32 ✗ o algo como: Juan 32 ✗ o lo que querramos, este texto es libre ● Por Headers: usando las cabeceras del request ✗ URL: http://miserver.com/empleados/alta ✗ y en las cabeceras tenemos que X-Nombre: Juan X-Edad: 32 ✗ rara vez se usa así
14 Demostraciones Técnicas – Santa Fe 2006 14 Armando un WS ● Hay varias formas, con distintas prestaciones ✗ Que escuche en un puerto u otro ✗ Que escuche de a un sólo pedido o varios en paralelo ● Yo creé uno genérico que... ✗ Se pone a escuchar en el puerto que le digamos ✗ Es multihilos, ejecutando muchos pedidos en paralelo ● Pero lo más interesante es que... ✗ No ejecuta nada por si mismo ✗ Es sólo una interfaz dinámica a otro código que tengamos ✗ Configurable on the fly, sin tener que reiniciarlo ✗ Rápido con pocos recursos: optimiza acceso al código ¡Veamos el código!
15 Demostraciones Técnicas – Santa Fe 2006 15 Un buscador ➢ Motivación y definiciones ➢ Estructura del sistema
16 Demostraciones Técnicas – Santa Fe 2006 16 Motivación y Definiciones ● La idea era mostrar el poder de Python ✗ Elegimos una aplicación difícil ✗ Mostramos que en Python, es fácil ● Elegimos un buscador ✗ ¿Nunca pensaron “Cuán complejo puede ser Google”? ● Capacidades del buscador: ✗ Armar un índice a partir de varios HTMLs ✗ Analizando un HTML y todos a los que enlaza ✗ Servir la búsqueda a través de una interfaz Web
17 Demostraciones Técnicas – Santa Fe 2006 17 Estructura del Sistema ● Construímos el índice: ✗ Varios threads: Repartidor, Constructor y Analizadores ✗ El Repartidor alimenta los Analizadores con URLs ✗ Cada Analizador trae el HTML y lo parsea ✗ Envía los URLs que encuentra de vuelta al Repartidor ✗ Envía las palabras al Constructor, que arma el índice ● Servimos la búsqueda: ✗ Armamos un servidor Web que ejecuta código Python ✗ Presenta la página principal de búsqueda ✗ Busca en el índice total y parcialmente ✗ Muestra las búsquedas en otra página
18 Demostraciones Técnicas – Santa Fe 2006 18 ¿Preguntas? ¿Sugerencias? Si todo lo que probamos en vivo, anduvo... ¡me debo una cerveza! ¡Muchas gracias! Facundo Batista [email protected] www.taniquetil.com.ar