[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