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:
parent
f4449162a1
commit
de87f1ff91
3 changed files with 15 additions and 7 deletions
|
@ -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'}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue