Problemas con socket, asyncore

Hector Miuler Malpica Gallegos miuler en gmail.com
Sab Ago 13 09:20:35 CEST 2005


Ok gracias, lo intentare, luego les cuento amigos.

El mar, 09-08-2005 a las 11:55 +0200, David Villa escribió:
> Hola:
> 
> La clase asyncore.dispatcher tiene un método "writable()". Cuando el
> core ejecuta ese método, si devuelve True ejecuta "handle_write()". El
> método heredado siempre devuelve True, por lo que tu objeto siempre está
> listo para escribir, y siempre lo hace. Debes redefinir ese método y
> devolver True sólo cuando tengas algo que enviar. Mira [1]
> 
> >>> import asyncore
> >>> a = asyncore.dispacher()
> >>> a.writable()
> True
> 
> Saludos
> 
> [1] http://python.org/doc/2.3.3/lib/asyncore-example.html
> 
> 
> El vie, 05-08-2005 a las 10:56 -0500, Hector Miuler Malpica Gallegos
> escribió:
> > Hola amigos, mi pequeño ejemplo con sockets consume mucho CPU (puede llegar 
> > a 90%), son dos programas un server y un cliente.
> > 
> > EL SERVER
> > =========
> > #!/usr/bin/python
> > 
> > import asyncore, socket
> > import psycopg, time, sys
> > 
> > 
> > class MetrosHandle(asyncore.dispatcher):
> > 
> > def handle_write(self):
> > print "handle_write"
> > #self.send("OK")
> > 
> > def handle_read(self):
> > print "handle_read"
> > data_ = self.recv(256)
> > print data_
> > 
> > def handle_close(self):
> > print "handle_close"
> > self.close()
> > 
> > 
> > class ServerFlamingo(asyncore.dispatcher):
> > 
> > def __init__(self, port=1728):
> > self.port = port
> > self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
> > self.bind(("", port))
> > self.listen(5)
> > print "listening on port", self.port
> > 
> > def handle_accept(self):
> > channel, addr = self.accept()
> > MetrosHandle(channel)
> > 
> > 
> > server = ServerFlamingo(1728)
> > asyncore.loop(1)
> > 
> > EL CLIENTE
> > ==========
> > ===
> > #!/usr/bin/python
> > 
> > import socket
> > 
> > HOST="localhost"
> > PORT=1728
> > 
> > s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> > s.connect((HOST, PORT))
> > s.send('000 Hello, world 000 \n')
> > s.send('111 Hello, world 111 \n')
> > s.send('222 Hello, world 222 \n')
> > s.send('333 Hello, world 333 \n')
> > s.send('444 Hello, world 444 \n')
> > #print s.recv(300)
> > s.close()
> > 
> > Al ejecutarlo el cliente al parecer el server abre la conexión lee los datos 
> > y entra en un casi eterno intento de escritura. Al quitar el comentario de 
> > #self.send("OK") en el handle_write(self) del server y quitar el comentario 
> > de #print s.recv(300) del cliente, recibo un monton de OK, porque este 
> > intento de de escribir un monton de veces ?
> > 
> > 
> > 
> > 
> > 
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es