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:
parent
8a6b84fe27
commit
bfe47ee6a7
2 changed files with 33 additions and 9 deletions
|
@ -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.
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Add table
Reference in a new issue