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