[python] Vlastní vlákno pro dlouhý výpočet.

Leos Pol leos na radiante-corp.com
Pátek Březen 2 16:33:54 CET 2007


Jakub Vojáček wrote:
> Jo, to je dobrý napád, ale jak ho realizovat?
> příklad:
>
> from Tkinter import*
> okno=Tk()
> p=True
> def ok():
>     while p:
>         print "sss"
> def stop():
>     p=False
> Button(text="zacni",command=ok).pack()
> Button(text="stpL",command=stop).pack()
> mainloop()
>
> To tlačítko stop se nedá zmáčknout, proto by se to asi mělo dělat přes ty vlákna. 
> Abych uvedl příklad tý akce co může trvat dolouho, tak například výpis prvočísel do 10000. 
> Další možnost je volat externí skript s parametrem a ten by výsledek pak uložil do souboru, ale to by bylo složité a blbě funkční
>
>   
Ja myslel, ze to pisete ve wxPythonu, tam se to da udelat velice hezky a 
bez pouziti threadu. Nasledujici priklad je opis vaseho prikladu:

class Trida:
   
    def __init__(self):
        Button(text="zacni",command=self.ok)
        Button(text="stpL",command=self.stop)
        self.p = True

    def ok(self):
        while self.p:
            print 'sss'
            wx.Yield()
   
    def stop(self):
        self.p = False

Priklad je jen nazorny zpusob, jak to jde udelat. Jinak tento priklad 
jste mel v te referenci, kterou jste uvedl:
    http://wiki.wxpython.org/index.cgi/LongRunningTasks
  
Doporucuji take poradne nastudovat fci wx.Yield, protoze muze dochazet 
treba k opetovnemu kliknuti na stejny button, takze se tam musi dodelat 
disable apod. Mimo jine, vyuziti tohoto zpusobu dojde k i tomu, ze 
nebude aplikace "zamrzavat" po dobu vypoctu, pokud tedy nebude trvat 
jeden cyklus ve while dlouho.

Leo

-- 
----
Leos Pol
SW Engineer
Radiante Corp.

If it can be imagined,
we can implement it



Další informace o konferenci Python