summaryrefslogtreecommitdiffstats
path: root/nova/wsgi.py
diff options
context:
space:
mode:
authorEric Day <eday@oddments.org>2010-11-02 11:28:14 -0700
committerEric Day <eday@oddments.org>2010-11-02 11:28:14 -0700
commit2e2dce7ebf478258f67a9122c6b158ba5e89c1ed (patch)
tree40890f3fb7166717d27d2d6fa679133d0df1da5e /nova/wsgi.py
parentab1c34f71745b901f40fd6a72dffc7a29a864990 (diff)
downloadnova-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.py25
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):