On Mon, Dec 22, 2014 at 12:09 PM, Riccardo Brazzale < riccardo.brazz...@gmail.com> wrote:
> Ciao a tutti, > > sto cercando di capire come gestire un thread avviandolo con wxpython. > Buona fortuna! > Ho trovato questo: > > import time > import wx > > from threading import Thread > > > [...] > > #---------------------------------------------------------------------- > def run(self): > """Run Worker Thread.""" > # This is the code executing in the new thread. > for i in range(6): > time.sleep(10) > amtOfTime = (i + 1) * 10 > wx.PostEvent(self.wxObject, ResultEvent(amtOfTime)) > time.sleep(5) > Ovviamente se fai una sleep blocchi tutto il thread. Non c'è modo (sano) di terminare un thread in questo stato, come con i processi. Quello che devi fare è mandare degli eventi al thread, e gestirli nella funzione run, ma non ho idea di come si faccia in Wx. Dovresti postare la tua funzione run reale, per capire come organizzare il codice. Ad esempio potresti usare una threading.Queue. Passa la queue allo stesso modo in cui passi wxObject. > [...] > Tuttavia, come faccio a terminare il thread avviato una volta che clicco > la x di chiusura o che metto lì un pulsante "chiudi"? > > Come detto, devi notificare in qualche modo il thread. A meno che wx non abbia qualcosa di molto conveniente disponibile, usa una queue. > Tenete presente che il tutto è sotto windows. > > Quello che succede (anche se non sempre) è che chiudendo, il programma va > in crash probabilmente proprio per il fatto che il thread rimane vivo e > tenta di restituire qualcosa che non è più possibile restituire. > Quando usi i thread è difficile capire cosa non va. Prova a loggare i vari stati dell'applicazione, per vedere se effettivamente il main thread termina prima del worker thread. Un bug del codice sicuramente è quello di non fare il .join del thread. Per evitare di bloccare l'interfaccia, passa un timeout basso e poi richiamalo ad intervalli regolari usando un timer. Esci dall'applicazione solo quando tutti i thread sono terminati. > [...] Ciao Manlio
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python