Example #1
0
    def run_with_gevent():
        from qs.misc import call_in_loop

        import gevent.pool
        pool = gevent.pool.Pool()
        for i in range(numgreenlets):
            pool.spawn(call_in_loop(1.0, start_worker))

        pool.join()
Example #2
0
def test_fail_and_restart():
    lst = []

    def doit():
        lst.append(len(lst))
        print "doit", lst
        if len(lst) == 5:
            raise RuntimeError("size is 5")
        elif len(lst) == 10:
            raise gevent.GreenletExit("done")

    c = call_in_loop(0.001, doit)
    pytest.raises(gevent.GreenletExit, c)
Example #3
0
    def run(self):

        class handler(rpcserver.request_handler, qplugin):
            def __init__(self, **kwargs):
                super(handler, self).__init__(**kwargs)

            workq = self.db.workq
            db = self.db

        s = self.server = rpcserver.server(self.port, host=self.interface, get_request_handler=handler, is_allowed=self.is_allowed_ip)
        self.port = s.streamserver.socket.getsockname()[1]
        print "listening on %s:%s" % (self.interface, self.port)

        loops = [(self.report, 20), (self.watchdog, 15), (self.handletimeouts, 1)]
        workers = gevent.pool.Pool()
        for fun, sleeptime in loops:
            workers.spawn(misc.call_in_loop(sleeptime, fun))

        bs = None
        try:
            backdoor_port = port_from_str(os.environ.get("qserve_backdoor", ""))
        except ValueError:
            pass
        else:
            from gevent import backdoor
            bs = backdoor.BackdoorServer(
                ("localhost", backdoor_port),
                locals=dict(_main=self,
                            workers=workers,
                            server=s,
                            workq=self.db.workq))
            bs.banner = "Welcome to qserve!"
            if hasattr(bs, "pre_start"):
                bs.pre_start()
            else:
                bs.init_socket()  # gevent >= 1.0b1
            print "starting backdoor on 127.0.0.1:%s" % bs.socket.getsockname()[1]
            bs.start()

        try:
            s.run_forever()
        except KeyboardInterrupt:
            print "interrupted"
        finally:
            self.savedb()
            workers.kill()
            if bs is not None:
                bs.kill()
Example #4
0
def main():
    # pywsgi.WSGIHandler.log_request = lambda *args, **kwargs: None

    from mwlib import argv
    opts, args = argv.parse(
        sys.argv[1:],
        "--disable-all-writers --qserve= --port= -i= --interface=")
    qs = []
    port = 8899
    interface = "0.0.0.0"
    for o, a in opts:
        if o == "--port":
            port = int(a)
        elif o == "--qserve":
            qs.append(a)
        elif o == "--disable-all-writers":
            name2writer.clear()
        elif o in ("-i", "--interface"):
            interface = a

    print "using the following writers", sorted(name2writer.keys())

    qs += args

    if not qs:
        qs.append("localhost:14311")

    _parse_qs(qs)

    address = interface, port
    server = pywsgi.WSGIServer(address, default_app())

    watchers = pool.Pool()
    for x in qs:
        watchers.spawn(call_in_loop(5.0, watch_qserve(x, busy)))

    try:
        print "listening on %s:%d" % address
        server.serve_forever()
    except KeyboardInterrupt:
        server.stop()
        print "bye."
Example #5
0
def main():
    # pywsgi.WSGIHandler.log_request = lambda *args, **kwargs: None

    from mwlib import argv
    opts, args = argv.parse(
        sys.argv[1:], "--disable-all-writers --qserve= --port= -i= --interface=")
    qs = []
    port = 8899
    interface = "0.0.0.0"
    for o, a in opts:
        if o == "--port":
            port = int(a)
        elif o == "--qserve":
            qs.append(a)
        elif o == "--disable-all-writers":
            name2writer.clear()
        elif o in ("-i", "--interface"):
            interface = a

    print "using the following writers", sorted(name2writer.keys())

    qs += args

    if not qs:
        qs.append("localhost:14311")

    _parse_qs(qs)

    address = interface, port
    server = pywsgi.WSGIServer(address, default_app())

    watchers = pool.Pool()
    for x in qs:
        watchers.spawn(call_in_loop(5.0, watch_qserve(x, busy)))

    try:
        print "listening on %s:%d" % address
        server.serve_forever()
    except KeyboardInterrupt:
        server.stop()
        print "bye."
Example #6
0
def test_iterate_error():
    c = call_in_loop(0.05, throw_error)
    stime = time.time()
    c.iterate()
    needed = time.time() - stime
    assert needed > 0.05