[Python-es] wxpython y threads que se atascan.
Chema Cortes
pych3m4 en gmail.com
Mie Ene 18 20:17:54 CET 2012
El día 18 de enero de 2012 00:02, Txema Vicente <txema en nabla.net> escribió:
> 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?
Es curioso el caso. En cualquier caso, nunca un "import" debería tener
otros efectos laterales que no sea el de declarar e inicializar
objetos. Pero sobre todo, nunca debería lanzar hilos de ejecución por
no ser seguro, tal y como indica la documentación:
http://docs.python.org/library/threading.html#importing-in-threaded-code
El porqué se bloquea con unas funciones y no con otras, es algo que
debe ser culpa del GIL. Lo mejor para estar seguros es que en el
import te limites a "declarar" y que continúes la ejecución una vez
terminada la importación:
def main():
app = wx.App(redirect=False)
app.SetTopWindow(Frame())
app.MainLoop()
if __name__=="__main__":
main()
En 'curioso.py', una vez importado el módulo, ya podrás ejecutar la
aplicación con seguridad a través de la función 'main()'
Por otro lado, me parece horrible pasar una clase (Test) donde te pide
una función para responder al EVT_BUTTON. Aquí pierdes todo control
sobre el hilo hijo. Supongo que no será así en el código final.
--
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales
Más información sobre la lista de distribución Python-es