Buenas.

Estoy trasteando con threading y wxpython, y me he topado con una cosa curiosa, que no entiendo por qué pasa.

La cosa es que si lanzo un hilo a trabajar, todo bien hasta que llega a un os.walk, en ese punto el hilo se pausa hasta que se cierre el frame, y en ese momento prosigue el os.walk. Despues de darle vueltas, he aislado el problema y ya se en que condiciones pasa, lo que me gustaría es saber el motivo. También pasa con encode (que supongo os.walk utilizará)

Esto funciona bien, si se ejecuta directamente :

#--- fichero: prueba.py
import wx
import threading

class Test(threading.Thread):
    def __init__(self, evento=None):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        print "TEST START"
        for i in range(10):
            print "->", str(i).encode('utf-8')
        print "TEST END"


class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="X", size=(350,200))
        p = wx.Panel(self)
        b = wx.Button(p, -1, "Test")
        b.Bind(wx.EVT_BUTTON, Test)
        self.Show()

app = wx.App(redirect=False)
app.SetTopWindow(Frame())
app.MainLoop()
#--- EOF

Pero si importo prueba desde otro script , todo funciona pero el hilo Test se queda pausado al llegar al encode.

#--- fichero: curioso.py
import prueba
#--- EOF

Si no se llama a MainLoop() en prueba.py y se hace en curioso.py, se arregla.

Hasta que me he topado con esto todo funcionaba perfectamente, si los hilos no contienen os.walk o decode (y habrá más, supongo).

No se si es que wx obliga a llamar a MainLoop() en __main__ (no, verdad?)
O es algo que deberia saber de python y esto no se debe hacer por algún motivo?

Explicación?

Saludos.

_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a