def handle_get(self, namespace, sender, blocking=True): q = self.get_q(namespace) if q.pq.is_empty(): if blocking: q.gq.add(sender) else: send_multi(self.socket, [sender, ZNull, "ZQueue.Empty"]) else: item_id, item = q.pq.pop_item() self.assign_item(namespace, item_id, item, sender)
def xreply(self, sender, message): arguments = process_command(message) if len(arguments) == 2: arguments.append("") try: namespace, command, argument = arguments except ValueError: return send_multi(self.socket, [sender, ZNull, super(ZQueue, self).reply(message)]) # print namespace, command if command == "get": self.qm.handle_get(namespace, sender) elif command == "nbget": self.qm.handle_get(namespace, sender, blocking=False) elif command.startswith("delete"): self.qm.handle_delete(namespace, argument) send_multi(self.socket, [sender, ZNull, "ack"]) elif command.startswith("add"): item_id = self.qm.handle_add(namespace, argument) send_multi(self.socket, [sender, ZNull, str(item_id)]) elif command.startswith("reset"): self.qm.handle_reset(namespace, argument) send_multi(self.socket, [sender, ZNull, "ack"]) else: log("Unknown command: %s" % command) send_multi(self.socket, [sender, ZNull, "Unknown command: %s" % command])
def thread_quit(self): for namespaced_queue in self.qm.qs.values(): while not namespaced_queue.gq.is_empty(): send_multi(self.socket, [namespaced_queue.gq.pop_getter(), ZNull, "ZQueue.Shutdown"]) self.qm.resetter.shutdown() super(ZQueue, self).thread_quit()
def assign_item(self, namespace, item_id, item, requester): send_multi(self.socket, [requester, ZNull, item_id + ":" + item]) key = "%s:reset:%s" % (namespace, item_id) self.assigned_items[key] = DelayedResetter(key, requester, self.resetter) self.assigned_items[key].start()