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
This commit is contained in:
helmutm 2008-03-24 11:04:54 +00:00
parent 8a6b84fe27
commit bfe47ee6a7
2 changed files with 33 additions and 9 deletions

View file

@ -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
<cybertools.agent.core.schedule.Scheduler object ...>
>>> 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.

View file

@ -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):