import sys import Pyro.EventService.Clients import Pyro.constants # # The 'main' Task abstract baseclass. # class PartitionableTask: def __init__(self, name): self.name=name def split(self, numPiecesHint): pass # implement in subclass def join(self, task): pass # implement in subclass, return True to stop the whole task. def getResult(self): pass # implement in subclass def __str__(self): return "" % self.name # # The subtask baseclass. The main task is split into these # subtasks, which are distributed over the processors. # The progress of each subtask can be monitored on the ES # channels Distributed.cell.* (*=subtask name) # (use the monitor.py for this) # class TaskPartition(Pyro.EventService.Clients.Publisher): def __init__(self, name): Pyro.EventService.Clients.Publisher.__init__(self) self.name=name def run(self): self.publish("Distributed.cell."+self.name, "START") for pos in self.work(): self.publish("Distributed.cell."+self.name, self.progress(pos)) self.publish("Distributed.cell."+self.name, "FINISHED") def progress(self,pos): return 100.0*pos/100.0 # override in subclass def work(self): yield 100 # override this generator in subclass, here the actual work is done def __str__(self): return "" % self.name