class WorkSet(object): def __init__(self, wsdir, wsid, writing=False): self.wsid = wsid self.qdir = os.path.join(wsdir, str(self.wsid)) if writing: FileEnqueue.recover(self.qdir) self.enq = FileEnqueue(self.qdir, buffer=200) else: self.enq = DummyFileEnqueue(self.qdir) self.deq = FileDequeue(self.qdir) self.running = True self.scheduledcount = 0 self.checkedoutcount = 0 self.finishedcount = 0 self.activecount = 0 def flush(self): # _flush() should be part of close(), but not now self.enq._flush() self.enq.close() def shutdown(self): self.flush() self.deq.close() def get_status(self): r = dict(id=self.wsid, running=self.running, scheduled=self.scheduledcount, checkedout=self.checkedoutcount, finished=self.finishedcount ) return r def schedule(self, curi): self.enq.queue(curi) self.scheduledcount += 1 def checkout(self, n): if not self.running: return [] r = [] while len(r) < n: curi = self.deq.get(timeout=0.001) if curi is None: self.enq.close() break r.append(curi) self.checkedoutcount += len(r) return r def deschedule(self, furi): self.finishedcount += 1
def __init__(self, wsdir, wsid, writing=False): self.wsid = wsid self.qdir = os.path.join(wsdir, str(self.wsid)) if writing: FileEnqueue.recover(self.qdir) self.enq = FileEnqueue(self.qdir, buffer=200) else: self.enq = DummyFileEnqueue(self.qdir) self.deq = FileDequeue(self.qdir) self.running = True self.scheduledcount = 0 self.checkedoutcount = 0 self.finishedcount = 0 self.activecount = 0