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!
#!/usr/bin/env python
import socket
from threading import *
import time
resultado=0
bloqueo=Lock()
def aceptar_conexiones():
while True:
global bloqueo
# creamos el socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # usamos esta funcion para mantener en eschucha el puerto que queramos este caso 8000
serversocket.bind(('localhost', 8000))
# mantenemos en escucha el servidor
serversocket.listen(3)
# aceptamos la conexion
clientsocket, clientaddress = serversocket.accept()
print 'Conexion desde: ', clientaddress # escribimos la ip del cliente
global resultado
resultado = resultado + 1
print "Es la conexión numero:", resultado
Condition().acquire()
Condition().notify()
Condition().release()
def recivir_datos():
Condition().acquire()
Condition().wait() # Espera por los datos
print "***A la espera de datos***"
if resultado != 0:
# mientras estamos conectados hace lo que este dentro del bucle
for i in range(5):
data = clientsocket.recv(1024) # recibimos datos del cliente
print 'cliente %s' % data # ponemos en pantalla lo que nos a dicho el cliente
Condition().release()
t = Thread(target=aceptar_conexiones())
t.start()
t1 = Thread(target=recivir_datos())
t.start()
clientsocket.close() # cerramos el socket
Error:
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