예제 #1
0
    def list_variables(self):
        #TODO: Define variables here to decouple from frostbite.
        assert self._is_logged_in()
        outer_rv = event.AsyncResult()
        rvs = []
        for var_type in commands.variable_types.values():
            var = var_type(None)
            var_rv = event.AsyncResult()
            rv = self._client.send(var)
            gevent.spawn(lambda v, r: [v.words[0], r.get()], var,
                         rv).link(var_rv)
            rvs.append(var_rv)

        gevent.spawn(lambda rs: dict([p.get() for p in rs]),
                     rvs).link(outer_rv)
        return outer_rv
예제 #2
0
파일: endpoint.py 프로젝트: ooici-dm/pyon
    def _send(self, msg, headers=None, **kwargs):

        # could have a specified timeout in kwargs
        if 'timeout' in kwargs and kwargs['timeout'] is not None:
            timeout = kwargs['timeout']
        else:
            timeout = CFG.endpoint.receive.timeout or 10

        log.debug("RequestEndpointUnit.send (timeout: %s)", timeout)

        if not self._recv_greenlet:
            self.channel.setup_listener(NameTrio(self.channel._send_name.exchange)) # anon queue
            self.channel.start_consume()
            self.spawn_listener()

        self.response_queue = event.AsyncResult()
        self.message_received = lambda m, h: self.response_queue.set((m, h))

        BidirectionalEndpointUnit._send(self, msg, headers=headers)

        try:
            result_data, result_headers = self.response_queue.get(timeout=timeout)
        except Timeout:
            raise exception.Timeout('Request timed out (%d sec) waiting for response from %s' % (timeout, str(self.channel._send_name)))

        log.debug("Got response to our request: %s, headers: %s", result_data, result_headers)
        return result_data, result_headers
예제 #3
0
 def __init__(self, _id):
     self.key = getattr(self, "key", None)
     self.id = _id
     self.main_thread: Greenlet = None
     self.threads = Group()
     self.ready_commit = event.Event()
     self.commit = event.Event()
     self.fail = event.Event()
     self.done = event.Event()
     self.result = event.AsyncResult()
예제 #4
0
        def method(*args):
            if assertion is not None:
                assertion()

            kwargs = {}
            for key in defaults:
                kwargs[key] = defaults[key]
            if arg_names is not None:
                for name, arg in map(None, arg_names, args):
                    kwargs[name] = arg

            msg = message_type(**kwargs)
            msg_rv = self._client.send(msg)
            if out is not None:
                rv = event.AsyncResult()
                gevent.spawn(out, msg_rv).link(rv)
                return rv
            else:
                return msg_rv