When zenjobs runs a Job, it calls the start()
method, which calls run()
and returns a Deferred
that will fire when the Job finishes; setup steps that can't happen in run()
for whatever reason should occur here. run()
should, as mentioned above, call finished()
; Jobs that require post-run actions may override finished()
to provide them.
Example 7.2. A Job that sends an email when starting and finishing
class EmailSendingJob(Job): def start() self.preRun() return super(EmailSendingJob, self).start() def run(self, r): # Do whatever self.finished(SUCCESS) def finished(self, r): self.postRun() return super(EmailSendingJob, self).finished(r) def preRun(self): sendEmail("Job %s is starting" % self.id) def postRun(self): sendEmail("Job %s has finished" % self.id)
A Job may provide an interrupt()
method that halts the job. The implementation of this method in the base class does nothing at all.