From: Tom S. <tom...@li...> - 2001-01-12 13:11:38
|
In the last discussions we touched implicitely some task scheduling questions. I looked at the Application.py code to search for a place, where one could plug that in (better than a TaskKit?), because I think this could become important for many things. You can do it with OS mechnism, but to have it crossplattform in the application framework would be really nice and a great plus. ########################################################### One scheduling example is realized for Sessions: in __init__.py you have if useSessionSweeper: self.startSessionSweeper() def startSessionSweeper(self): def sweepSessionsContinuously(self,close): def sweepSessions(self): ########################################################### Let's make this more general (Task seems a good name). Look at the following python code + pseudocode, where I just show what I have in mind, not every detail (sleeping time, ...) Application(self,....,useTasks=1,..) def __init(self,...) if useTasks: self._tasks = get tasklist from Application.config or by a name convention *Task.py self.startTasks() # possible Tasks: # * Session, # * Scheduling of "Webware cronjobs" # * Generate static pages # * update in memory information def startTasks(self): #self._tasks could also be a parameter for task in self._tasks: task.run(app, close) class Task: def run(self, app, close): # for Session this is called # sweepSessionsContinuously: # there you need app.running, app.sessions(), class SessionSweepTask(Task): def run(self, app, close): while self.running: self.sweepSessions() try: close.wait(self.setting('SessionTimeout')*60/10.0) except IOError: pass def sweepSessions(self, app): sessions = app.sessions() ... class CalendarTask(Task): # this is for tasks which run once or # no seldom. use a Task subclass if # your task ha to be scheduled often #(e.g. every Minute..) # use mxDateTime for this kind of stuff def run(self, app, close): class PageWriterTask(Task): def run((self, app, close): #generate staic pages ########################################################### in Application.config use: 'Tasks': ['SessionSweep', 'Calendar', 'PageWriter'], ########################################################### hey, hope you like this proposal. I'm sure I forgot something, but it looks ok afrer reading it several times :-) The amazing thing with Webware ist, that you can go down to the framework, understand and even change it. After 2 years of Zope programming I still have no idea how it works under the hood! -- Tom Schwaller http://www.linux-community.de |