abrir socket dentro de un thread

punchik punchik punchikk en yahoo.com
Vie Jun 6 18:01:37 CEST 2008


hola, disculpas por enviar el codigo en html , no me habia dado cuenta.
aca esta el codigo:
class MiThread(threading.Thread):
    def __init__(self, num):
       
        threading.Thread.__init__(self)
        self.num = num
        self.apid = select_access_point()
        self.apo = access_point(self.apid)
        set_default_access_point(self.apo)
        self.s = socket(AF_INET, SOCK_STREAM)
        self.myip= self.apo.ip()
        self.params = urllib.urlencode({'data': self.myip, 'equis': 3123, 'ygri': 12444})
        self.headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
        self.conn = httplib.HTTPConnection("www.ketaplex.net")

    def manda(self):

         self.conn.request("POST", "/cgi-bin/grow_recibe.py", self.params, self.headers)
         self.response = self.conn.getresponse()        
                   
       
    def run(self):
        running= 1
        while running:
           self.manda()

Lo que estoy tratando es abir el socket en un nuevo thread y luego quiero enviar constantemente datos al servidor o sea en loop, no se porque no funciona. Cuando corro el codigo abre el socket una vez al comienzo y luego cada vez que intento enviar al servidor me pregunta por el access point que voy a usar como si no lo hubiese abierto antes. Esto sucede cuando pongo el codigo que abre que selecciones el access point , abre el socket y envia los datos dentro de un thread, ya que si lo pongo fuera funciona bien.
Alguien tiene alguna idea? mi thread lo estoy inicializando asi:
t = MiThread(1)
t.start()
t.join()




--- On Fri, 6/6/08, Oswaldo Hernández <listas en soft-com.es> wrote:
From: Oswaldo Hernández <listas en soft-com.es>
Subject: Re: [Python-es] abrir socket dentro de un thread
To: "Lista de discusión sobre python en castellano" <python-es en aditel.org>
Date: Friday, June 6, 2008, 9:07 AM

punchik punchik escribió:
> hola amigos, tengo dos preguntas relacionados a threads. la primera es: 
> necesito enviar datos a un servidor constantemente, para esto estoy usando
la libreria httplib. Lo primero que intente es enviar&nbsp; los datos desde
el loop princial del mi programa, el problema con esto es que la funcion
request, espera hasta que se conecte y luego necesita recibir una respuesta,
por lo que si pongo esto en el loop principal mi aplicacion termina por hacerse
muy lenta, es por lo cual me recomendaron usar un thread para enviar los datos
al servidor.l
> &nbsp;
> Estoy tratando de abrir un socket desde un thread de la siguiente manera:
> &nbsp;
> class MiThread(threading.Thread):
> &nbsp;&nbsp;&nbsp; def __init__(self, num):
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
apid = select_access_point()
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apo
= access_point(apid)
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
set_default_access_point(apo)
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s =
socket(AF_INET, SOCK_STREAM)
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
myip= apo.ip()
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
params = urllib.urlencode({'data': myip, 'equis': 3123,
'ygri': 12444})
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
headers = {"Content-type":
"application/x-www-form-urlencoded", "Accept":
"text/plain"}
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
conn = httplib.HTTPConnection("www.ketaplex.net")
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
threading.Thread.__init__(self)
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
self.num = num
> &nbsp;&nbsp;&nbsp; def run(self):
>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
conn.request("POST", "/cgi-bin/grow_recibe.py", params,
headers)
>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
response = conn.getresponse()
> &nbsp;
> &nbsp;
> mi thread lo inicializo de la siguiente manera
> &nbsp;
> t = MiThread(1)
> t.start()
> t.join()
> &nbsp;
> bueno el problema es que no funciona no se porque, cuando ejecuto el
codigo desde fuera del thread si envia el mensaje al servidor, pero cuando lo
pongo dentro del thread no funciona. Algujien tiene idea de que estroy haciendo
mal?
> &nbsp;
> &nbsp;
> &nbsp;
> &nbsp;
> la segunda pregunta que tenia es como puedo hacer para ejecutar la funcion
run en forma de loop. osea cuando termine de enviar al servidor ,
vuelva&nbsp; a iniciar el ciclo y envie de nuevo. 
> &nbsp;
> muchas gracias.
> &nbsp;
> 

El mensaje que envias es dificil de entender, configura tu aplicacion de correo
para que no envie html.

Sobre los threads te recomiendo esta lectura que a mi me sirvió de mucho:
<http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf>

Saludos,

-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


      
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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