[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