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()
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)
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()
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."
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