Foros del Web » Programando para Internet » Python »

socket e hilos en python

Estas en el tema de socket e hilos en python en el foro de Python en Foros del Web. Saludos estube buscando un codigo en python para abrir socket para recibir parametros de varios clientes a la vez y me dijeron que tengo que ...
  #1 (permalink)  
Antiguo 15/05/2012, 20:58
 
Fecha de Ingreso: diciembre-2008
Mensajes: 65
Antigüedad: 15 años, 11 meses
Puntos: 0
socket e hilos en python

Saludos estube buscando un codigo en python para abrir socket para recibir parametros de varios clientes a la vez y me dijeron que tengo que usar hilos en python estoy cero recien estoy empezando y encontre este codigo y lo adapte un poco a mis necesidades lo que hace este codigo es abrir un puerto y esperar clientes cuando un cliente se conecta acepta la coneccion y manda un hilo para que se ejecute aparte recibo los parametros y los grabo en postgres y cierro la conneccion y el socket.

bueno me gustaria saber si este codigo esta bien y la adaptacion osea que no me consuma mucha memoria ya que estamos viendo la situacion de conectar 200 clientes ah y cada cliente envia informacion cada 30 segundos :).
gracias

Código Python:
Ver original
  1. #! /usr/bin/env python
  2. '''
  3. Created on 20/02/2009
  4. @author: Chuidiang
  5.  
  6.  
  7. Ejemplo de socket en python. Un servidor que acepta clientes.
  8. Si el cliente envia "hola", el servidor contesta "pues hola".
  9. Si el cliente envia "adios", el servidor contesta "pues adios" y
  10. cierra la conexion.
  11. El servidor no acepta multiples clientes simultaneamente.
  12. '''
  13. import pg
  14. import socket
  15. from threading import Thread
  16.  
  17. #Clase con el hilo para atender a los clientes.
  18. #En el constructor recibe el socket con el cliente y los datos del
  19. #cliente para escribir por pantalla
  20. class Cliente(Thread):
  21.     def __init__(self, socket_cliente, datos_cliente):
  22.         Thread.__init__(self)
  23.         self.socket = socket_cliente
  24.         self.datos = datos_cliente
  25.  
  26.     # Bucle para atender al cliente.      
  27.     def run(self):
  28.       # Bucle indefinido hasta que el cliente envie "adios"
  29.       seguir = True
  30.       while seguir:
  31.          # Espera por datos
  32.          peticion = self.socket.recv(1024)
  33.          
  34.          usuario='postgresql'
  35.          clave='12345'
  36.          base='prueba'
  37.  
  38.          conexion=pg.connect(dbname=base,user=usuario,passwd=clave)
  39.          consulta="select * from registra_trama_prueba1('"+peticion+"')"
  40.  
  41.          respuesta=conexion.query(consulta)
  42.          conexion.close()
  43.          
  44.          print peticion
  45.          self.socket.close()
  46.          print "desconectado "+str(self.datos)
  47.          seguir = False
  48.              
  49.        
  50.  
  51.  
  52.  
  53. if __name__ == '__main__':
  54.    # Se prepara el servidor
  55.    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  56.    server.bind(("", 9090))
  57.    server.listen(1)
  58.    print "Esperando clientes..."
  59.    
  60.    # bucle para atender clientes
  61.    while 1:
  62.        
  63.       # Se espera a un cliente
  64.       socket_cliente, datos_cliente = server.accept()
  65.      
  66.       # Se escribe su informacion
  67.       print "conectado "+str(datos_cliente)
  68.      
  69.       # Se crea la clase con el hilo y se arranca.
  70.       hilo = Cliente(socket_cliente, datos_cliente)
  71.       hilo.start()

Última edición por razpeitia; 15/05/2012 a las 21:52
  #2 (permalink)  
Antiguo 15/05/2012, 22:19
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: socket e hilos en python

Creo que ya lo mencione antes, pero puedes usar twisted, para hacerlo de forma eficiente.

Otra cosa, es que el código tiene por lo menos 2 errores, que son independientemente del lenguaje.
1.- De la linea 30 a 47 tienes un ciclo que solo se ejecuta una sola vez, ¿entonces para que quieres el ciclo?
2.- Linea 39, tienes un problema de sql injection, no se si así hagas las queries en otros lenguajes, pero es una mala practica en python, en php y cualquier otro lenguaje.

Tengo duda, si esto es para un trabajo o para la escuela. En cualquiera de los dos casos este codigo no parece aceptable para ninguno de los 2 ámbitos.

Si quieres un codigo con explicación te dejo este link, que es el primer resultado de "socket and threads python" en google.

Última edición por razpeitia; 16/05/2012 a las 10:56

Etiquetas: gui, hilos, socket, usuarios, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:22.