schedule: put successor jobs in queue instead of just 'run'ning them

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1902 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-08-10 10:19:18 +00:00
parent f4449162a1
commit de87f1ff91
3 changed files with 15 additions and 7 deletions

View file

@ -32,7 +32,7 @@ transferred.
We are now ready to schedule the job and let the reactor execute it.
>>> scheduler.schedule(crawlJob, int(time()))
>>> scheduler.schedule(crawlJob)
>>> tester.iterate()
Metadata: {'path': '...data...file1.txt'}

View file

@ -39,9 +39,12 @@ class Scheduler(object):
self.queue = {}
self.logger = None
def schedule(self, job, startTime):
def schedule(self, job, startTime=None):
if startTime is None:
startTime = int(time())
job.startTime = startTime
job.scheduler = self
# TODO: find a better key to identify jobs
self.queue[startTime] = job
reactor.callLater(startTime-int(time()), job.run)
@ -53,6 +56,8 @@ class Job(object):
implements(IScheduledJob)
scheduler = None
def __init__(self, **params):
self.startTime = 0
self.params = params
@ -60,6 +65,8 @@ class Job(object):
self.repeat = 0
def execute(self):
""" Must be overridden by subclass.
"""
d = Deferred()
return d
@ -72,12 +79,13 @@ class Job(object):
# TODO: logging
def finishRun(self, result):
# remove from queue
del self.scheduler.queue[self.startTime]
# run successors
for job in self.successors:
job.params['result'] = result
job.run()
# remove from queue
del self.scheduler.queue[self.startTime]
#job.run()
self.scheduler.schedule(job)
# TODO: logging
# reschedule if necessary
if self.repeat:

View file

@ -23,7 +23,7 @@ $Id$
"""
from twisted.internet import reactor
from twisted.internet.defer import Deferred
from twisted.internet.defer import succeed
from zope.interface import implements
from loops.agent.interfaces import ITransportJob, ITransporter
@ -43,5 +43,5 @@ class Transporter(BaseTransporter):
if metadata is not None:
print 'Metadata:', metadata
print 'Transferring:', text
return Deferred()
return succeed('OK')