Saludos pythoneros. Llevo un tiempo desarrollando una aplicación cliente-servidor tipo p2p descentralizado, los servidores usan un pool de procesos para las conexiones.
Para no mezclar y líar el código y la lógica de mi aplicación con el código y la lógica de cliente-servidor he separado todo el código cliente-servidor, y estoy desarrollando con ello una librería cliente-servidor de gran abstracción muy sencilla de usar. Y otra vez, para no mezclar la lógica de cliente-servidor con la lógica de multi-proceso, separé todo el código multi-proceso en otra librería. Si alguién tiene interés en usar (están en continuo desarrollo y posiblemente sufran modificaciones) o ver alguna librería la subo a megaupload y pego aquí el enlace, si a alguién le interesa el proyecto y tiene ganas de ayudar podemos montar algo. Funcionando tengo: - environ: una librería que hace uso de las variables de entorno de forma totalmente transparente para la aplicación. Esto es, donde va un entero, ponemos un environ.Int, y la aplicación no nota la diferencia, pero podemos cambiar el valor desde el proceso padre (en unix). Yo la uso para establecer el loglevel de todos los procesos. Hay una versión environ para Int, Float, Long y Complex, si hay interés desarrollaré también str, y list, dict y set serializables. - Exceptions: no tiene nada que ver con el multiproceso, define una clase base de excepciones que se pueden lanzar con un mensaje y cualquier numero de parametros con nombre, para pasar información arbitraria entre el raise y el except. define también una función para crear rápidamente nuevas excepciones, para poder hacer un except fino. exceptions.makeException('nombre de excepción') fork: Aún es de bastabte bajo nivel, aún tengo en el servidor mucha código que debería estar en esta librería. Define 3 funciones, forkPipe que devuelve (pid del hijo, pipe de lectura, pipe de escritura) al padre y (0, pipe de lectura, pipe de escritura) al hijo forkSocket que devuelve pid o 0 y un socket af_unix zombi: Comprueba si hay algún proceso hijo finalizado, lo limpia y devuelve su pid y su código de salida (sys.exit(..)), si no hay ninguno hijo finalizado si no hay ningún proceso finalizado devuelve (0,0) multilog, un logger a archivo para multiproceso (requiere un servidor de multilog corriendo) poll, añade bastante abstracción sobre select.poll define una clase Poll, cuyos objetos tienen los siguientes métodos Poll.register(fileno, evento (POLLIN, POLLOUT...), callback, *parametros de usuario) poll.unregister(fileno, evento) poll.enable(fineno, evento, *parametros de usuario) poll.disable(fileno, evento) poll.clear() poll.do([timeout=0]) A está librería de poll tengo pensado añadirle más abstracción hasta tener un sistema de comunicación entre procesos basado en eventos más que en mensajes vía pipe o socket. Tengo pensado trabajar en un sistema de diccionario compartido, tal vez con la posibilidad de que lance eventos cuando se modifique algún valor. _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/