Procesos en python

Rubén Menéndez Montaño rmmontano en hotmail.com
Mar Feb 27 22:42:34 CET 2007


      Buenas.

          Soy bastante nuevo en python, y en la lista asi que perdonad si me 
equivoco en algo o cometo algun error, aceptaré de buen grado todas las 
sugerencias :P
          El caso es que como digo soy novato en python, y tengo ciertos 
problemas con el manejo de procesos a traves del modulo os. La situacion es 
la siguiente : estoy tratando de diseñar un pequeño server de ficheros que 
corra tanto en Linux como en Windows, y que sea capaz de aceptar varias 
peticiones de envio de ficheros, de forma que cada vez que llega una 
conexion nueva, lanzo un nuevo proceso hijo que gestiona la peticion. El 
problema viene en este momento : he probado a lanzar el proceso hijo nuevo 
de distintas formas :

              1) os.fork() : funciona perfecto para lo que yo quiero. El 
problema es que en la documentación de python indica que esta operacion no 
es posible bajo windows, con lo cual.....malamente.

              2) Despues de 1, intenté usar la familia de llamadas 
os.spawn*, en concreto os.spawnl,  pasandole como argumento la función que 
gestiona la peticion del fichero correspondiente. Para probar que se creara 
l proceso hijo y ver que el proceso padre pudiera seguir aceptando 
conexiones y creando procesos hijo, probé a poner un bucle infinito en la 
funcion dque llama el hijo, pero el proceso hijo se crea, y no devuelve el 
control, Pongo el codigo de esta segunda "no-solucion" que pensé para que 
quede más claro :

      ## acepta conexion y la gestiona
      
threadGroups.append(os.spawnl(os.P_NOWAITO,self.procesaPeticion(client,n_conexion)))
      .....
      .....

def procesaPeticion(self,client,n_conn):
        """ Gestiona la peticion del cliente que le llega como parametros 
"""
        client.send('hola cliente')
        while 1:pass
##        print 'Thread ' + threadGroups[n_conn] + ': Esto es una prueba '
        client_addr.close()


       El proceso hijo se queda en procesaPeticion, y nunca devuelve el 
control, ni cierra el descriptor con el cliente ni nada de nada.

       Mi pregunta es : ¿existe alguna manera de hacer lo que quiero 
manteniendo la portabilidad entre windows y linux ? ¿Hay alguna otra 
sentencia de gestion de procesos hijo  que me permita hacerlo ?

                    Gracias a todos de antemano y un saludo.

_________________________________________________________________
Descarga gratis la Barra de Herramientas de MSN 
http://www.msn.es/usuario/busqueda/barra?XAPID=2031&DI=1055&SU=http%3A//www.hotmail.com&HL=LINKTAG1OPENINGTEXT_MSNBH




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