import datetime from apscheduler.scheduler import Scheduler import wx.grid as gridlib import wx class GridFrame(wx.Frame): flag = 0 myGrid = None def __init__(self, parent): wx.Frame.__init__(self, parent) self.myGrid = gridlib.Grid(self, -1) self.myGrid.CreateGrid(100, 100) self.Show() self.__scheduler = Scheduler() self.__scheduler.start() self.__scheduler.add_interval_job(self.__start, seconds=1) def __start(self): multipler = 10 if self.flag < multipler * 1: wx.CallAfter(self.__updateNormal) elif self.flag < multipler * 2: wx.CallAfter(self.__updateTableOnly) elif self.flag < multipler * 3: wx.CallAfter(self.__updateBeginBatchOnly) elif self.flag < multipler * 4: wx.CallAfter(self.__updatebeginbatchAndDataTable) def __updateNormal(self): self.flag = self.flag + 1 s = datetime.datetime.now() a = self.flag * 10000 for row in range(0, 100): for col in range(0, 100): val = str(a) self.myGrid.SetCellValue(row, col, val) a = a + 1 e = datetime.datetime.now() print '__updateNormal' , self.flag, (e - s) def __updateBeginBatchOnly(self): self.flag = self.flag + 1 s = datetime.datetime.now() a = self.flag * 10000 for row in range(0, 100): self.myGrid.BeginBatch() for col in range(0, 100): val = str(a) self.myGrid.SetCellValue(row, col, val) a = a + 1 self.myGrid.EndBatch() e = datetime.datetime.now() print '__updateBeginBatchOnly' , self.flag, (e - s) def __updateTableOnly(self): self.flag = self.flag + 1 s = datetime.datetime.now() a = self.flag * 10000 table = self.myGrid.GetTable() for row in range(0, 100): for col in range(0, 100): val = str(a) table.SetValue(row, col, val) a = a + 1 e = datetime.datetime.now() print '__updateTableOnly' , self.flag, (e - s) def __updatebeginbatchAndDataTable(self): self.flag = self.flag + 1 s = datetime.datetime.now() a = self.flag * 10000 table = self.myGrid.GetTable() for row in range(0, 100): self.myGrid.BeginBatch() for col in range(0, 100): val = str(a) table.SetValue(row, col, val) a = a + 1 self.myGrid.EndBatch() e = datetime.datetime.now() print '__updatebeginbatchAndDataTable' , self.flag, (e - s) if __name__ == '__main__': app = wx.App(0) frame = GridFrame(None) app.MainLoop()