[python] Vlastní vlákno pro dlouhý výpočet.
Jakub Vojáček
Jakohv na seznam.cz
Pátek Březen 2 16:46:08 CET 2007
> ------------ Původní zpráva ------------
> Od: Leos Pol <leos na radiante-corp.com>
> Předmět: Re: [python] Vlastní vlákno pro dlouhý výpočet.
> Datum: 02.3.2007 16:34:54
> 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
>
Děkuju, už sem to nějak udělal:
# -*- coding: cp1250 -*-
import wx
def dlouha_funkce(cislo):
while cislo != 50:
if not vypocet:return "Přerušeno"
cislo=cislo+1
print cislo
wx.Yield()
return "Výpočet dokončen"
class Okno:
def __init__(self):
self.okno=wx.Frame(None)
button=wx.Button(self.okno,label="Počítej")
button.Bind(wx.EVT_BUTTON, self.pocitej)
button2=wx.Button(self.okno,label="Stop",pos=(40,40))
button2.Bind(wx.EVT_BUTTON, self.stop)
self.okno.Show(True)
def pocitej(self,akce):
global vypocet
vypocet=True
vysledek=dlouha_funkce(0)
dlg = wx.MessageDialog(self.okno,vysledek, '', wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
def stop(self,akce):
global vypocet
vypocet=False
if __name__ == "__main__":
vypocet=True
p = wx.App(0)
Okno()
p.MainLoop()
Dělal sem to hodně narychlo, takže se omlouvám za to hnusný global ve třídě;)
Ještě jednou dík!!
Blujacker
Další informace o konferenci Python