Test Foro de elhacker.net SMF 2.1

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