def test_close_with_makefile(self): def accept_close_early(listener): # verify that the makefile and the socket are truly independent # by closing the socket prior to using the made file try: conn, addr = listener.accept() fd = conn.makefile() conn.close() fd.write('hello\n') fd.close() r = fd.write('a') assert r is None, r self.assertRaises(socket.error, conn.send, 'b') finally: listener.close() def accept_close_late(listener): # verify that the makefile and the socket are truly independent # by closing the made file and then sending a character try: conn, addr = listener.accept() fd = conn.makefile() fd.write('hello') fd.close() conn.send('\n') conn.close() r = fd.write('a') assert r is None, r self.assertRaises(socket.error, conn.send, 'b') finally: listener.close() def did_it_work(server): client = socket.create_connection(('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.readline() == 'hello\n' assert fd.read() == '' fd.close() server = socket.tcp_listener(('0.0.0.0', 0)) server_greenlet = gevent.spawn(accept_close_early, server) did_it_work(server) server_greenlet.kill() server = socket.tcp_listener(('0.0.0.0', 0)) server_greenlet = gevent.spawn(accept_close_late, server) did_it_work(server) server_greenlet.kill()
def __init__(self, address, locals=None): Greenlet.__init__(self) if isinstance(address, socket.socket): self.socket = address else: self.socket = socket.tcp_listener(address) self.locals = locals
def test_del_closes_socket(self): timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything try: conn, addr = listener.accept() conn = conn.makefile() conn.write('hello\n') conn.close() r = conn.write('a') assert r is None, r finally: listener.close() server = socket.tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection(('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == 'hello\n' assert fd.read() == '' timer.cancel()
def main(): if len(argv) < 1: print >> stderr, 'Please provide a path to your config file.' return 1 os.environ['SD_PROXY_CONFIG'] = argv[1] from serverdensity.proxy.app import app from serverdensity.proxy import settings from serverdensity.proxy.runserver import run handler = logging.StreamHandler(stderr) handler.setLevel(logging.WARNING) handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]' )) app.logger.addHandler(handler) app.debug = settings.debug process_num = settings.processes or cpu_count() print >> stdout, 'Starting %s sd-proxy(s) on port %s..' % ( process_num, settings.port,) listener = tcp_listener(('127.0.0.1', settings.port)) for i in xrange((process_num - 1)): Process(target=run, args=(app, None, listener)).start() run(app, None, listener) return 0
def main(): if len(argv) < 1: print >> stderr, 'Please provide a path to your config file.' return 1 os.environ['SD_PROXY_CONFIG'] = argv[1] from serverdensity.proxy import settings, setup_logging from serverdensity.proxy.app import app from serverdensity.proxy.runserver import run setup_logging(app) app.debug = settings.debug process_num = settings.processes or cpu_count() app.logger.info('Starting %s sd-proxy(s) on port %s..' % ( process_num, settings.port,)) listener = tcp_listener(('127.0.0.1', settings.port)) for i in xrange((process_num - 1)): Process(target=run, args=(app, None, listener)).start() run(app, None, listener) return 0
def setUp(self): greentest.TestCase.setUp(self) self.listener = socket.tcp_listener(('127.0.0.1', 0))
from gevent import monkey; monkey.patch_all() from gevent.server import StreamServer from gevent.socket import tcp_listener from multiprocessing import cpu_count, Process def echo(socket, addr): fileobj = socket.makefile() while True: line = fileobj.readline() if not line or line.strip().lower() == 'quit': break socket.send(line) def serve_forever(listener): StreamServer(listener, echo).serve_forever() if __name__ == '__main__': listener = tcp_listener(('0.0.0.0', 6000)) for i in range(cpu_count()): p = Process(target=serve_forever, args=(listener, )).start()
def start(self): self.socket = socket.tcp_listener(self.address) self.address = self.socket.getsockname() self.server = Greenlet.spawn(server, self.socket, self.application)
from gevent import monkey monkey.patch_all() from gevent.server import StreamServer from gevent.socket import tcp_listener from multiprocessing import cpu_count, Process def echo(socket, addr): fileobj = socket.makefile() while True: line = fileobj.readline() if not line or line.strip().lower() == 'quit': break socket.send(line) def serve_forever(listener): StreamServer(listener, echo).serve_forever() if __name__ == '__main__': listener = tcp_listener(('0.0.0.0', 6000)) for i in range(cpu_count()): p = Process(target=serve_forever, args=(listener, )).start()
def progress_report(): start = time.time() last = 0 while True: current = progress_counter.value() print (current - last), "per second" last = current time.sleep(1) if __name__ == '__main__': progress_counter = atomic_t.AtomicT() workers = [multiprocessing.Process(target=serve, args=( socket.tcp_listener(('127.0.0.1', BASE_BACKEND + x), backlog=50, reuse_addr=True), serve_worker)) for x in xrange(WORKERS)] front_sock = socket.tcp_listener(('', 12345), backlog=50, reuse_addr=True) proxies = [multiprocessing.Process(target=serve, args=(front_sock, serve_proxy)) for x in xrange(PROXIES)] progress = multiprocessing.Process(target=progress_report) progress.start() for worker in workers: worker.start() for proxy in proxies: proxy.start() for worker in workers: worker.join() for proxy in proxies: proxy.join()