Cargando



Python - Múltiples Conexiones

En este tutorial veremos las bases de las múltiples conexiones con Python y realizaremos algunos ejemplos prácticos para entender mejor el tema.


dic 09 2013 15:12
Profesional
dic 11 2013 10:20
Como sabemos Python posee muchas librerías que nos permiten trabajar y manejar conexiones en redes, ya sea que nos conectemos a archivos remotos o que nuestro programa sirva como servidor, en ejemplos básicos de uso de sockets con Python se ha visto que se maneja de forma muy sencilla con la utilización del módulo socket, sin embargo para que sea una aplicación más robusta debemos ser capaces de manejar múltiples conexiones.

Para el manejo de múltiples conexiones en Python podemos valernos del Forking y del Threading, para con ello poder generar procesos de entrada y salida asíncronos que nos permitan atender varias conexiones al mismo tiempo.

Forking y Threading

Si estamos en nuestros primeros pasos del aprendizaje de programación o si solamente hemos realizado programación estructurada tal vez estos términos puedan parecer complicados al ser desconocidos, sin embargo son conceptos sencillos de entender y digerir, veamos las definiciones antes de continuar adelante.

Forking: Es un término utilizado en ambientes UNIX y consiste en realizar una bifurcación, con un proceso lo duplicamos y entonces tenemos dos procesos iguales pero cada uno con su ámbito, el proceso original se conoce como proceso padre y el proceso duplicado se conoce como el proceso hijo, si hacemos una analogía con la ciencia ficción, podemos verlos como universos paralelos, donde existen las mismas cosas solo que pueden comportarse diferente en los mismos puntos.

La desventaja del Forking es que puede resultar muy costoso a nivel de recursos y por ello tenemos el Threading, un Thread es un hilo, en este caso los hilos son sub-procesos que pertenecen a un mismo proceso, compartiendo memoria y recursos, de esta forma bajamos el costo de los recursos del procesador, sin embargo al compartir memoria nos encontramos con el problema que debemos ser muy cuidadosos con los elementos a los que tienen acceso los Threads para no tener como resultado operaciones comprometidas.

Ahora que sabemos la teoría y los conceptos básicos vamos a ver algunos ejemplos con los cuales podremos ver la aplicación en Python.

Como habíamos dicho al inicio gracias a la gran cantidad de módulos y librerías existentes en Python, realizar programas con funcionalidades de redes es muy sencillo, así que podremos concentrarnos en la lógica en vez de los aspectos técnicos.

Veamos en la siguiente imagen un ejemplo de Forking, luego explicaremos que sucede con el código:

python_multconex1.jpg


Lo primero que hacemos es importar los módulos que necesitamos de SocketServer, importante que nos fijemos es en ForkingMixIn que es quien se encargará de gestionar la duplicación de los procesos con cada petición, luego definimos la clase Server y Handler, dentro de Handler colocamos un constructor, que es quien va a gestionar que pasará con las conexiones entrantes, en este caso, obtendrá el nombre del cliente y hará una impresión por pantalla de un mensaje; por ultimo instanciamos la clase Server, le pasamos los parámetros, primero el puerto donde aceptara conexiones y luego la clase Handler, finalmente llamamos el método serve_forever para iniciar el servidor y que pueda gestionar las peticiones de los clientes.

Como vemos es bastante simple esta aplicación, veamos cómo podremos lograr algo similar utilizando Threads, en la siguiente imagen tenemos un ejemplo:



python_multconex2.jpg


Podemos darnos cuenta que es casi exactamente el mismo código anterior con la diferencia que en vez de usar ForkingMixIn, utilizamos ThreadingMixIn, entonces como vemos estas son las librerías clave para este comportamiento al momento de hacer programas que acepten múltiples conexiones.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X