diff options
author | Eric Day <eday@oddments.org> | 2010-11-02 11:28:14 -0700 |
---|---|---|
committer | Eric Day <eday@oddments.org> | 2010-11-02 11:28:14 -0700 |
commit | 2e2dce7ebf478258f67a9122c6b158ba5e89c1ed (patch) | |
tree | 40890f3fb7166717d27d2d6fa679133d0df1da5e /nova/wsgi.py | |
parent | ab1c34f71745b901f40fd6a72dffc7a29a864990 (diff) | |
download | nova-2e2dce7ebf478258f67a9122c6b158ba5e89c1ed.tar.gz nova-2e2dce7ebf478258f67a9122c6b158ba5e89c1ed.tar.xz nova-2e2dce7ebf478258f67a9122c6b158ba5e89c1ed.zip |
Added support for OpenStack and EC2 APIs to run on different ports.
Diffstat (limited to 'nova/wsgi.py')
-rw-r--r-- | nova/wsgi.py | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/nova/wsgi.py b/nova/wsgi.py index eb305a3d3..b04b487ea 100644 --- a/nova/wsgi.py +++ b/nova/wsgi.py @@ -39,10 +39,27 @@ import webob.exc logging.getLogger("routes.middleware").addHandler(logging.StreamHandler()) -def run_server(application, port): - """Run a WSGI server with the given application.""" - sock = eventlet.listen(('0.0.0.0', port)) - eventlet.wsgi.server(sock, application) +class Server(object): + """Server class to manage multiple WSGI sockets and applications.""" + + def __init__(self, threads=1000): + self.pool = eventlet.GreenPool(threads) + + def start(self, application, port, host='0.0.0.0', backlog=128): + """Run a WSGI server with the given application.""" + socket = eventlet.listen((host, port), backlog=backlog) + self.pool.spawn_n(self._run, application, socket) + + def wait(self): + """Wait until all servers have completed running.""" + try: + self.pool.waitall() + except KeyboardInterrupt: + pass + + def _run(self, application, socket): + """Start a WSGI server in a new green thread.""" + eventlet.wsgi.server(socket, application, custom_pool=self.pool) class Application(object): |