From bfe47ee6a71850abbdb5825499c21c8ef2d26757 Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 24 Mar 2008 11:04:54 +0000 Subject: [PATCH] added the twisted-based scheduler to the simple doctest sequence git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2471 fd906abe-77d9-0310-91a1-e0d9ade77398 --- agent/README.txt | 24 ++++++++++++++++++++++++ agent/core/schedule.py | 18 +++++++++--------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/agent/README.txt b/agent/README.txt index e31b8cd..319416b 100644 --- a/agent/README.txt +++ b/agent/README.txt @@ -103,6 +103,7 @@ the path to the configuration file. >>> from cybertools.agent.base.agent import Master >>> master = Master(configFile) + >>> configFile.close() >>> master.config controller.name = 'sample' @@ -181,3 +182,26 @@ Logging ... print r 2... agent:sample01 job:00001 message:job execution 2... agent:sample01 job:00002 message:job execution + + +Using the Twisted-based Scheduler +================================= + + >>> config = ''' + ... controller(name='sample') + ... scheduler(name='core') + ... logger(name='default', standard=30) + ... ''' + >>> master = Master(config) + + >>> master.scheduler + + + >>> master.setup() + + >>> jobSpec = JobSpecification('sample', '00001', agent='sample01') + >>> master.setupJobs([jobSpec]) + + >>> from cybertools.agent.tests import tester + >>> tester.iterate() + Job 00001 on agent sample01 has been executed. diff --git a/agent/core/schedule.py b/agent/core/schedule.py index da52b7b..6c9b87a 100644 --- a/agent/core/schedule.py +++ b/agent/core/schedule.py @@ -26,6 +26,7 @@ from time import time from zope.interface import implements from cybertools.agent.base.agent import Master +from cybertools.agent.base.schedule import Scheduler as BaseScheduler from cybertools.agent.components import schedulers from cybertools.agent.interfaces import IScheduler @@ -33,27 +34,26 @@ from twisted.internet import reactor from twisted.internet.defer import Deferred -class Scheduler(object): +class Scheduler(BaseScheduler): implements(IScheduler) def __init__(self, agent): self.agent = agent - self.queue = [] + self.queue = {} def schedule(self, job, startTime=None): - print "core.schedule called" job.startTime = startTime or int(time()) - self.queue.append(job) + #self.queue.append(job) if startTime is None: startTime = int(time()) job.startTime = startTime - job.scheduler = self - #while startTime in self.queue: - # startTime += 1 - #self.queue[startTime] = job + #job.scheduler = self # obsolete, set already in job's __init__() + while startTime in self.queue: # TODO: use another key for the queue; + startTime += 1 # is the queue necessary anyway? + self.queue[startTime] = job reactor.callLater(startTime-int(time()), job.execute) - job.execute() + #job.execute() return startTime def getJobsToExecute(startTime=0):