python - Multiple wx.Yield() alternative -
i have wxpython gui application reads growing text file , prints wx.textctrl window. need have 2 of these running @ same time, bumping wxyield called recursively error. there easy alternative wx.yield allow me run multiples please?
self.running_log = wx.textctrl(self, -1, pos=(5, 5), size=(875,605), style = wx.te_multiline|wx.te_readonly|wx.hscroll) while true: wx.yield() filesize = os.path.getsize(logpath) if filesize > lastsize: lines = infile.readlines() newlines = 0 line in lines[lastlineindex:]: newlines += 1 print line.rstrip() self.running_log.appendtext(line)
have @ wxpython wiki: longrunningtasks. there you'll see 2 alternatives using wxyield: threading or putting processing evt_idle handler.
but since you're using wxyield, let me suggest solution can try before changing else: use flag indicate whether running or not. if flag true, don't let code execute wxyield again.
when call wx.yield(), wxpython take control , process events needs take care of. when finished, long running task proceed again, right after yield call. can put processing in loop , let spin there long needs to. adding flag limit entry point yield is. when processing has finished release 'lock' toggling flag, , entry point of code changes actual method invocation again.
something along lines of:
if not running: running = true while true: wx.yield() filesize = os.path.getsize(self.logpath) if filesize > lastsize: lines = infile.readlines() newlines = 0 line in lines[lastlineindex:]: newlines += 1 self.running_log.appendtext(line) # when finished, set running false , break note might idea check how getsize called. if happens limit ensuring short amount of time has elapsed, avoid excessive calls slowing down system.
Comments
Post a Comment