[python] Thread a wxpython

superman feed na centrum.cz
Středa Červenec 16 15:16:31 CEST 2008


A je Vám známo, že všechny grafické knihovny jsou dělány na jedno 
vlákno? A že neumí korektně zacházet s tím, když jim ve více vláknech 
ovládáte grafické objekty? A pokud ano, tak se to musí speciálně 
ošetřovat, a není to úplně snadné?

Ono totiž udělat multithreadovou knihovnu nese značnou režii. Je to 
složité, a vzniká při tom řada problémů, které se ne vždy dají vyřešit. 
Protože principiálně nelze všechny problémy u multithreadových 
rozsáhlých knihoven vyřešit, a protože v případě grafické knihovny ani 
nemá moc smysl se příliš snažit o multithreading, bývají grafické 
knihovny tvrdě single task.

V případě, že se bez dalšího ošetření pokusíte použít knihovnu jako 
multi thread, pak se může stát cokoli, od zhroucení knihovny, přes 
neintegritu vnitřních datových struktur, až po různé obranné akce 
knihovny jako rušení objektů, či násilné uvolňování různých API.

S grafickými knihovnami se pracuje tak, že je řídí jedno vlákno, pokud 
nejsou vážné důvody dělat to jinak.

Miloslav Ponkrác


vaclavik na ondrav.net napsal(a):
> Zdravím, mám takový problém, když vytvořím jakýkoliv obejekt wxpythonu
> ve vláknu, tak po dokončení toho vlákna zmizí. Já bych potřeboval aby
> zůstal. S vlákny teprve začínám. Jednoduchý příklad:
>
> # -*- coding: utf-8 -*-
> import wx
> import thread
> class Okno:
>     def __init__(self, parent):
>         self.okno=wx.MDIChildFrame(parent,title=u"Test",id=-1)
>         self.okno.Maximize()
>         thread.start_new_thread(self.funkce,())
>     def funkce(self):
>         self.promena=wx.StaticText(self.okno, label=u"Test")
> if __name__ == "__main__":
>     okno = wx.App(0)
>     parent=wx.MDIParentFrame(None,size=wx.Size(500,500))
>     Okno(parent)
>     parent.Show()
>     okno.MainLoop()
>
> Díky za pomoc
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
>
>   



Další informace o konferenci Python