I often have a need to log my progress when doing a repetitive task. Logging allows me to continue where I left off if execution is halted (for example, perhaps my VPS server was rebooted by my host).
My current working solution is a bit ad hock. Any input on improving this would be appreciated:
class RepeatingTask(object): def __init__(self, first, logfile): self.current = first self.logfile = logfile def page(self): self.process_request() self.increment() self.log_progress() def process_request(self): # do processing here... pass def increment(self): # set self.current = next item for processing # when items are exhausted, set self.current=None pass def log_progress(self): if self.current is None: os.remove(self.logfile) else: with open(self.logfile, 'w') as logfile: logfile.write(json.dumps([["current","key-xyz"], [self.current,self.val_abc]])) def resume(self): try: with open(self.logfile, 'r') as logfile: content = logfile.read() except IOError: return False content = json.loads(content) content = dict(zip(content,content)) self.current = content['current'] self.val_abc = content['key-xyz'] return True if __name__ == "__main__": task_object = RepeatingTask("first_item_to_process","/path/to/logfile") if task_object.resume(): print "Resuming progress, current:", task_object.current else: print "Starting freash, current:", task_object.current while task_object.current is not None: task_object.page() # do some work print "Next:", task_object.current