Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Robertus98 en 11 Julio 2014, 10:27 am



Título: Alternar Threads Python
Publicado por: Robertus98 en 11 Julio 2014, 10:27 am
Bueno, como daryo me explico la restriccion del Gil en los hilos en python, me puse con los procesos, pero no he obtenido buenos resultados y vuelvo a los threads pero ahora con "condition", pero me da un error de que no he adquirido el candado!

Código
  1. #!/usr/bin/env python
  2.  
  3. import socket
  4. from threading import *
  5. import time
  6.  
  7. resultado=0
  8. bloqueo=Lock()
  9.  
  10. def  aceptar_conexiones():
  11.    while True:
  12.        global bloqueo
  13.        # creamos el socket    
  14.        serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     # usamos esta funcion para mantener en eschucha el puerto que queramos este caso 8000
  15.        serversocket.bind(('localhost', 8000))
  16.        # mantenemos en escucha el servidor
  17.        serversocket.listen(3)
  18.        # aceptamos la conexion
  19.        clientsocket, clientaddress = serversocket.accept()
  20.        print 'Conexion desde: ', clientaddress # escribimos la ip del cliente
  21.        global resultado
  22.        resultado = resultado + 1
  23.        print "Es la conexión numero:", resultado
  24.        Condition().acquire()
  25.        Condition().notify()
  26.        Condition().release()
  27.  
  28. def recivir_datos():
  29.    Condition().acquire()
  30.    Condition().wait() # Espera por los datos
  31.    print "***A la espera de datos***"
  32.    if resultado != 0:
  33.        # mientras estamos conectados hace lo que este dentro del bucle
  34.        for i in range(5):
  35.            data = clientsocket.recv(1024) # recibimos datos del cliente
  36.            print 'cliente %s' % data # ponemos en pantalla lo que nos a dicho el cliente
  37.    Condition().release()
  38.  
  39. t = Thread(target=aceptar_conexiones())
  40. t.start()
  41. t1 = Thread(target=recivir_datos())
  42. t.start()
  43.  
  44. clientsocket.close() # cerramos el socket

Error:

Citar
Traceback (most recent call last):
  File "D:\Desktop\Servidor socket.py", line 39, in <module>
    t = Thread(target=aceptar_conexiones())
  File "D:\Desktop\Servidor socket.py", line 25, in aceptar_conexiones
    Condition().notify()
RuntimeError: cannot notify on un-acquired lock