Alternar Threads Python

Iniciado por Robertus98, 11 Julio 2014, 10:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Robertus98

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 (python) [Seleccionar]
#!/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:

CitarTraceback (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