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 >>> from cybertools.agent.base.agent import Master
>>> master = Master(configFile) >>> master = Master(configFile)
>>> configFile.close()
>>> master.config >>> master.config
controller.name = 'sample' controller.name = 'sample'
@ -181,3 +182,26 @@ Logging
... print r ... print r
2... agent:sample01 job:00001 message:job execution 2... agent:sample01 job:00001 message:job execution
2... agent:sample01 job:00002 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 zope.interface import implements
from cybertools.agent.base.agent import Master 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.components import schedulers
from cybertools.agent.interfaces import IScheduler from cybertools.agent.interfaces import IScheduler
@ -33,27 +34,26 @@ from twisted.internet import reactor
from twisted.internet.defer import Deferred from twisted.internet.defer import Deferred
class Scheduler(object): class Scheduler(BaseScheduler):
implements(IScheduler) implements(IScheduler)
def __init__(self, agent): def __init__(self, agent):
self.agent = agent self.agent = agent
self.queue = [] self.queue = {}
def schedule(self, job, startTime=None): def schedule(self, job, startTime=None):
print "core.schedule called"
job.startTime = startTime or int(time()) job.startTime = startTime or int(time())
self.queue.append(job) #self.queue.append(job)
if startTime is None: if startTime is None:
startTime = int(time()) startTime = int(time())
job.startTime = startTime job.startTime = startTime
job.scheduler = self #job.scheduler = self # obsolete, set already in job's __init__()
#while startTime in self.queue: while startTime in self.queue: # TODO: use another key for the queue;
# startTime += 1 startTime += 1 # is the queue necessary anyway?
#self.queue[startTime] = job self.queue[startTime] = job
reactor.callLater(startTime-int(time()), job.execute) reactor.callLater(startTime-int(time()), job.execute)
job.execute() #job.execute()
return startTime return startTime
def getJobsToExecute(startTime=0): def getJobsToExecute(startTime=0):