abrir socket dentro de un thread

lasizoillo lasizoillo en gmail.com
Sab Jun 7 22:14:40 CEST 2008


Buenas:

El día 6 de junio de 2008 1:49, punchik punchik <punchikk en yahoo.com> 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  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

Veo tres opciones posibles:
- Procesos.
- Hilos
- Eventos. Por ejemplo twisted. Yo suelo tirar más por este lado.

>
> Estoy tratando de abrir un socket desde un thread de la siguiente manera:
>
> class MiThread(threading.Thread):
>     def __init__(self, num):
>         apid = select_access_point()
>         apo = access_point(apid)
>         set_default_access_point(apo)
>         s = socket(AF_INET, SOCK_STREAM)
>         myip= apo.ip()
>         params = urllib.urlencode({'data': myip, 'equis': 3123, 'ygri': 12444})
>         headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
>         conn = httplib.HTTPConnection("www.ketaplex.net")
>         threading.Thread.__init__(self)
>         self.num = num
>     def run(self):
>          conn.request("POST", "/cgi-bin/grow_recibe.py", params, headers)
>          response = conn.getresponse()
>

No entiendo por qué veo tan poco "self" en tu código. ¿Usas variables
globales en vez de atributos de la clase?

>
> mi thread lo inicializo de la siguiente manera
>
> t = MiThread(1)
> t.start()
> t.join()
>
> 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?
>

¿Desde fuera del hilo tambien lo haces usando orientacion a objetos?

>
>
>
> 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  a iniciar el ciclo y envie de nuevo.

Una aproximación un poco guarra:

while True:
    self.hacer_lo_que_sea()

Lo que no entiendo es que quieras enviar cosas todo el rato y no
necesites preguntar si hay cosas que enviar. Pero bueno, en eso no me
voy a meter.

Un saludo:

Javi
_______________________________________________
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