def __init__(self, name): """Constructor for FIFO-type variables. Arguments: name - user-readable name for var """ BaseVar.__init__(self, name) self._contents = new_list() self._metadata = new_list() self._index = 0
def add_waiter(self, jid, client, request, handler): """Add a result queue waiter. Parameters: jid - job id whose results we seek client - who seeks the results? request - original request object handler - callback to receive results """ if not self.__blocked_clients.has_key(jid): self.__blocked_clients[jid] = new_list() self.__blocked_clients[jid].append((client, request, handler)) return None
def add_worker(self, worker): """Add a new worker, to whom will be distributed another copy of each broadcast task. Will return False if the group is closed or if the worker has already been added. """ if worker in self.__broadcast_by_worker: return False if self.__broadcast_master is None: return False # Add the worker newbcastlist = new_list(self.__broadcast_master) self.__broadcast_by_worker[worker] = newbcastlist return True
def wake_all(self): """Wake all task waiters. This should be called any time a broadcast task is submitted, to wake any sleeping workers. """ clients = self.__blocked_clients self.__blocked_clients = new_list() for client, request, handler in clients: try: val = self.workspace.task_queue_fetch(client, request) except OperationFailure, fail: handler(fail) continue if val is not None: handler(val) else: self.__blocked_clients.append((client, request, handler))
def __init__(self, workspace): self.workspace = workspace self.__blocked_clients = new_list()
def __init__(self): self.__broadcast_master = [] self.__unicast = new_list() self.__broadcast_by_worker = {}
def add_result(self, jid, result): """Add a new result.""" if not self.__results.has_key(jid): self.__results[jid] = new_list() self.__results[jid].append(result)