[pyar] Problema con Threads y Webkit

Ernesto Savoretti esavoretti en gmail.com
Lun Ago 9 08:35:40 ART 2010


El día 9 de agosto de 2010 02:11, Mario Colque <colquemario en gmail.com> escribió:
> Hola amigos! como están?
>
> tengo un problema que me está comiendo la cabeza...
>
> Porque cuando ejecuto este script, no me muestra como debería el "navegador":
>
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
>
> import gtk, webkit
> import threading
> import time
>
> class Window(threading.Thread):
>    def __init__(self, algo):
>        threading.Thread.__init__(self)
>        self.algo = algo
>
>    def run(self):
>        time.sleep(2)
>        print self.algo
>        w = gtk.Window()
>        b = webkit.WebView()
>        w.add(b)
>        b.open('http://google.com')
>        w.show_all()
>
> gtk.gdk.threads_init()
> print "antes del hilo"
> r = Window('ejecuto el hilo')
> r.start()
> print "despues del hilo"
> gtk.main()
>
> Pero cuando ejecuto r.run() en vez de r.start() si funciona, pero
> pierdo los hilos....
>

Hay un concepto básico, que se mantiene independientemente del sistema
operativo, del toolkit gráfico y del lenguaje de programación usado:
"Las hebras de usuario no tocan la GUI".
Esto es básico y elemental (pero no suficientemente mencionado) y no
debería ser soslayado nunca. Las hebras de usuario sólo se comunican
con la GUI a través de un mecanismo de mensajería (por ejemplo, en
Python, se puede usar queue)
Con run en vez de start te funciona porque no estás iniciando una
hebra aparte, simplemente estás invocando en forma standard un método
de tu clase.
Tal vez puedas servirte de esto:
http://www.codeproject.com/KB/threads/usingworkerthreads.aspx
que si bien usa C++, desarrolla muy bien el concepto.

Saludos.
-- 

                                    Ernesto Savoretti



More information about the pyar mailing list