Esempio n. 1
0
 def setUp(self):
     from gevent import monkey
     monkey.patch_all()
     self.server = GeventServer(SlaveService, port=18878, auto_register=False)
     self.server.logger.quiet = False
     self.server._listen()
     gevent.spawn(self.server.start)
Esempio n. 2
0
 def setUp(self):
     self.server = GeventServer(SlaveService,
                                port=18878,
                                auto_register=False)
     self.server.logger.quiet = False
     self.server._listen()
     gevent.spawn(self.server.start)
Esempio n. 3
0
 def start_rpc(self):
     self.server = GeventServer(self.service,
                                hostname=self.options.rpc_host,
                                port=self.options.rpc_port,
                                auto_register=False,
                                logger=logger)
     self.server._listen()
     gevent.spawn(self.server.start)
     return self.server
Esempio n. 4
0
class Test_GeventServer(unittest.TestCase):

    def setUp(self):
        from gevent import monkey
        monkey.patch_all()
        self.server = GeventServer(SlaveService, port=18878, auto_register=False)
        self.server.logger.quiet = False
        self.server._listen()
        gevent.spawn(self.server.start)

    def tearDown(self):
        self.server.close()

    def test_connection(self):
        with rpyc.classic.connect("localhost", port=18878) as c:
            c.execute("x = 5")
            self.assertEqual(c.namespace["x"], 5)
            self.assertEqual(c.eval("1+x"), 6)

    def test_multiple_connections(self):
        def get_ident(gevent):
            return gevent.monkey.get_original('threading', 'get_ident')()
        c1 = rpyc.classic.connect("localhost", port=18878)
        c2 = rpyc.classic.connect("localhost", port=18878)
        c3 = rpyc.classic.connect("localhost", port=18878)
        with c1, c2, c3:
            id0 = get_ident(gevent)
            id1 = get_ident(c1.modules.gevent)
            id2 = get_ident(c2.modules.gevent)
            id3 = get_ident(c3.modules.gevent)
            # all server greenlets and clients running in same OS thread ;)
            self.assertEqual(id0, id1)
            self.assertEqual(id1, id2)
            self.assertEqual(id1, id3)

    def test_parallelism(self):
        conns = [rpyc.classic.connect("localhost", port=18878)
                 for _ in range(50)]
        try:
            start = time.time()
            gevent.joinall([
                gevent.spawn(c.modules.time.sleep, 1)
                for c in conns
            ])
            stop = time.time()

            self.assertLessEqual(stop - start, 2)

        finally:
            for c in conns:
                c.close()
Esempio n. 5
0
class Events(object):

    rpc_conn = None

    def __init__(self, app, options):
        self.state = EventsState()
        self.options = options
        self.app = app
        self.server = None

        self.service = classpartial(CeleryStateService, self.state)
        self.client = RpcClient(self.service)

    def get_remote_state(self):
        if self.rpc_conn is None:
            self.rpc_conn = self.client.connect(self.options.rpc_host,
                                                port=self.options.rpc_port)
        return self.rpc_conn.root.get_state()

    def start_rpc(self):
        self.server = GeventServer(self.service,
                                   hostname=self.options.rpc_host,
                                   port=self.options.rpc_port,
                                   auto_register=False,
                                   logger=logger)
        self.server._listen()
        gevent.spawn(self.server.start)
        return self.server

    def run(self):
        self.start_rpc()
        try_interval = 1
        while True:
            try:
                try_interval *= 2

                with self.app.connection() as conn:
                    recv = EventReceiver(conn,
                                         handlers={"*": self.on_shutter},
                                         app=self.app)
                    try_interval = 1
                    recv.capture(limit=None, timeout=None, wakeup=True)
            except Exception as e:
                logger.error(
                    "Failed to capture events: '%s', "
                    "trying again in %s seconds.", e, try_interval)
                logger.debug(e, exc_info=True)
                time.sleep(try_interval)

    def enable_events(self):
        # Periodically enable events for workers
        # launched after flower
        try:
            self.app.control.enable_events()
        except Exception as e:
            logger.debug("Failed to enable events: '%s'", e)

    def on_shutter(self, event):
        self.state.event(event)

        if not self.state.event_count:
            # No new events since last snapshot.
            return
Esempio n. 6
0
        version = version_reader.version()
        #get_h().dispose_component_interface(version_reader)   # <-- VersionInfo is always pre-enabled, so don't disable it.
        log.info("Controller version: {}".format(version))
    except Exception as e:
        version = None
        log.error("Unable to get controller version: {}".format(e))
        # Allow error to pass, so that the server can start below.
        # The server will report this error to clients.

    global_lock = Semaphore(value=1)

    always_enabled_components = []
    if version is not None:
        if version < (1, 1):
            always_enabled_components.append('CarMotors')

    component_manager = ComponentManager(global_lock,
                                         always_enabled_components)

    ControllerService = classpartial(ControllerService, component_manager,
                                     global_lock, version)

    rpc_server = GeventServer(ControllerService, port=18861)

    log.info("RUNNING!")

    gevent.joinall([
        gevent.spawn(rpc_server.start),
        #gevent.spawn(component_manager.callback_thread),
    ])
Esempio n. 7
0
            draw_all()

    def exposed_set_battery_percent(self, pct):
        """
        `pct` should be an integer in [0, 100].
        """
        with self.lock:
            if not isinstance(pct, int) or not (0 <= pct <= 100):
                raise Exception("Invalid battery percent")
            pct = "{}%".format(pct)
            global battery_sprite
            battery_sprite = header_font.render(pct, True, HEADER_TXT_COLOR)
            draw_all()


from rpyc.utils.server import GeventServer
from rpyc.utils.helpers import classpartial

global_lock = Semaphore(value=1)

ConsoleService = classpartial(ConsoleService, global_lock)

rpc_server = GeventServer(ConsoleService, port=18863)

log.info("RUNNING!")

gevent.joinall([
    gevent.spawn(rpc_server.start),
])