示例#1
0
    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)